最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot 自定義 Shiro 過濾器無(wú)法使用 @Autowired問題及解決方法

 更新時(shí)間:2019年06月21日 08:48:57   作者:NWGDK  
這篇文章主要介紹了Spring Boot 自定義 Shiro 過濾器無(wú)法使用 @Autowired問題及解決方法 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在 Spring Boot 中集成 Shiro,并使用 JWT 進(jìn)行接口認(rèn)證。

為了統(tǒng)一對(duì) Token 進(jìn)行過濾,所以自定義了一個(gè) JwtTokenFilter 過濾器。

期間遇到了以下幾個(gè)問題,這里逐一進(jìn)行記錄,以備日后查閱。

問題一:JwtTokenFilter 無(wú)法使用 @Autowired

因?yàn)樽远x了一個(gè) JWT Token 工具類,用來(lái)解析和創(chuàng)建 Token,JwtTokenFilter 中需要用到此工具類,這里本來(lái)可以直接手動(dòng)進(jìn)行 new 一個(gè)新的實(shí)例,但由于在 Spring 配置文件中定義了 JWT 簽名密鑰和過期時(shí)間,所以想使用 Spring @ConfigurationProperties 注解進(jìn)行值得注入,所以這里必須不能手動(dòng) new 一個(gè)新的實(shí)例。

所以在 ShiroConfiguration 配置文件中將 JwtTokenFilter 過濾器交由 Spring 管理:

@Bean
public JwtTokenFilter JwtTokenFilter() {
  return new JwtTokenFilter();
}

啟動(dòng)項(xiàng)目進(jìn)行測(cè)試,JwtTokenFilter 過濾器中 JwtUtil 類成功注入,但又遇到了另外一個(gè)問題。

問題二:anon 過濾器失效

在問題一解決后,登錄接口一直顯示需要認(rèn)證,所以在只能將 ShiroFilterFactoryBean 中定義的 JwtTokenFilter 又改為原先手動(dòng) new:

@Bean(name = "shiroFilter")
public ShiroFilterFactoryBean shiroFilterFactoryBean() {
  ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
  shiroFilterFactoryBean.setSecurityManager(securityManager());
  // 注冊(cè)自定義過濾器
  Map<String, Filter> filterMap = new LinkedHashMap<>(8);
  // 這里只能使用 new 新建實(shí)例
  filterMap.put("authc", new JwtTokenFilter());
  shiroFilterFactoryBean.setFilters(filterMap);
  Map<String, String> filterChains = new LinkedHashMap<>(8);
  filterChains.put("/v1/admin/login", "anon");
  filterChains.put("/**", "authc");
  shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChains);
  return shiroFilterFactoryBean;
}

接著創(chuàng)建一個(gè) Spring 的上下文管理工具類,代碼如下:

package com.nwgdk.ums.common.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
 * Spring 上下文工具類
 *
 * @author nwgdk
 */
@Component
public class SpringContextUtil implements ApplicationContextAware {
  private static ApplicationContext applicationContext;
  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    SpringContextUtil.applicationContext = applicationContext;
  }
  /**
   * 獲取上下文
   */
  public static ApplicationContext getApplicationContext() {
    return applicationContext;
  }
  /**
   * 通過 bena 名稱獲取上下文中的 bean
   */
  public static Object getBean(String name) {
    return applicationContext.getBean(name);
  }
  /**
   * 通過類型獲取上下文中的bean
   */
  public static Object getBean(Class<?> requiredType) {
    return applicationContext.getBean(requiredType);
  }
}

接著,在 JwtTokenFilter 過濾器中通過以上工具類獲取 JwtUtil 工具類:

if (StringUtils.isNotEmpty(jwtToken)) {
  if (jwtUtil == null) {
    jwtUtil = (JwtUtil) SpringContextUtil.getBean("jwtUtil");
  }
}

啟動(dòng)項(xiàng)目進(jìn)行測(cè)試,成功登錄。

總結(jié)

以上所述是小編給大家介紹的Spring Boot 自定義 Shiro 過濾器無(wú)法使用 @Autowired問題及解決方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • @Cacheable 拼接key的操作

    @Cacheable 拼接key的操作

    這篇文章主要介紹了@Cacheable 拼接key的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-02-02
  • 深入淺析HashMap key和value能否為null

    深入淺析HashMap key和value能否為null

    HashMap的key和value可為null,線程不安全,HashTable的key和value均不可為null,線程安全,ConcurrentHashMap在多線程場(chǎng)景下使用,key和value也不能為null,還對(duì)它們進(jìn)行了測(cè)試和底層代碼分析,本文介紹HashMap key和value能否為null,感興趣的朋友跟隨小編一起看看吧
    2025-04-04
  • SpringBoot整合SpringDataJPA的示例

    SpringBoot整合SpringDataJPA的示例

    本文主要介紹了SpringBoot整合SpringDataJPA的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • java基于odbc連接oracle的實(shí)現(xiàn)方法

    java基于odbc連接oracle的實(shí)現(xiàn)方法

    這篇文章主要介紹了java基于odbc連接oracle的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了連接操作的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-09-09
  • 詳解Spring 攔截器流程及多個(gè)攔截器的執(zhí)行順序

    詳解Spring 攔截器流程及多個(gè)攔截器的執(zhí)行順序

    這篇文章主要介紹了Spring 攔截器流程及多個(gè)攔截器的執(zhí)行順序的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Spring框架,感興趣的朋友可以了解下
    2021-05-05
  • SpringBoot測(cè)試類注入Bean失敗的原因及分析

    SpringBoot測(cè)試類注入Bean失敗的原因及分析

    SpringBoot 2.2版本前后測(cè)試類有所變化,2.2版本之后使用JUnit 5,導(dǎo)入注解@SpringBootTest和@Test來(lái)自junit.jupiter.api包;而2.2版本之前使用JUnit 4,需要額外導(dǎo)入@RunWith注解來(lái)自junit.runner包,無(wú)論哪個(gè)版本,都需確保測(cè)試類和啟動(dòng)類的包名一致
    2024-09-09
  • 手把手教你如何在idea中搭建SpringBoot項(xiàng)目

    手把手教你如何在idea中搭建SpringBoot項(xiàng)目

    這篇文章主要介紹了如何搭建一個(gè)SpringBoot項(xiàng)目,包括環(huán)境準(zhǔn)備、創(chuàng)建新項(xiàng)目、探索項(xiàng)目結(jié)構(gòu)以及展望未來(lái),通過詳細(xì)的步驟和實(shí)用的技巧,幫助開發(fā)者快速上手SpringBoot開發(fā),文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • java中TestNG使用教程詳解

    java中TestNG使用教程詳解

    TestNG是Java中的一個(gè)測(cè)試框架, 類似于JUnit 和NUnit, 本文主要介紹了java中TestNG使用教程詳解,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12
  • 泛談Java NIO

    泛談Java NIO

    java.nio全稱java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO),使用它可以提供非阻塞式的高伸縮性網(wǎng)絡(luò)。下面我們來(lái)簡(jiǎn)單了解一下吧
    2019-05-05
  • Java操作minio刪除文件夾及其文件方法(MinIO基本使用)

    Java操作minio刪除文件夾及其文件方法(MinIO基本使用)

    MinIO是一個(gè)高性能、無(wú)限擴(kuò)展的開源對(duì)象存儲(chǔ)服務(wù)器,它以對(duì)象的形式存儲(chǔ)數(shù)據(jù),并兼容Amazon S3接口,它適用于大規(guī)模數(shù)據(jù)存儲(chǔ)、大數(shù)據(jù)分析、文件共享和備份等應(yīng)用場(chǎng)景,這篇文章主要介紹了java操作minio刪除文件夾及其文件方法,需要的朋友可以參考下
    2024-02-02

最新評(píng)論

句容市| 汕尾市| 舟山市| 吴川市| 宕昌县| 永定县| 临澧县| 西吉县| 宁国市| 竹溪县| 蓬莱市| 温州市| 山阴县| 三都| 朝阳县| 呼玛县| 钟祥市| 福安市| 化德县| 体育| 小金县| 曲水县| 垦利县| 游戏| 三原县| 南城县| 广丰县| 深州市| 贡觉县| 华容县| 调兵山市| 清徐县| 清新县| 无棣县| 嘉祥县| 七台河市| 阿合奇县| 邯郸市| 中江县| 五莲县| 樟树市|