激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Boot 自定義 Shiro 過濾器無法使用 @Autowired問題及解決方法

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

2019-06-26 13:05NWGDK Java教程

這篇文章主要介紹了Spring Boot 自定義 Shiro 過濾器無法使用 @Autowired問題及解決方法 ,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

在 Spring Boot 中集成 Shiro,并使用 JWT 進行接口認證。

為了統一對 Token 進行過濾,所以自定義了一個 JwtTokenFilter 過濾器。

期間遇到了以下幾個問題,這里逐一進行記錄,以備日后查閱。

問題一:JwtTokenFilter 無法使用 @Autowired

因為自定義了一個 JWT Token 工具類,用來解析和創建 Token,JwtTokenFilter 中需要用到此工具類,這里本來可以直接手動進行 new 一個新的實例,但由于在 Spring 配置文件中定義了 JWT 簽名密鑰和過期時間,所以想使用 Spring @ConfigurationProperties 注解進行值得注入,所以這里必須不能手動 new 一個新的實例。

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

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

啟動項目進行測試,JwtTokenFilter 過濾器中 JwtUtil 類成功注入,但又遇到了另外一個問題。

問題二:anon 過濾器失效

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

@Bean(name = "shiroFilter")
public ShiroFilterFactoryBean shiroFilterFactoryBean() {
  ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
  shiroFilterFactoryBean.setSecurityManager(securityManager());
  // 注冊自定義過濾器
  Map<String, Filter> filterMap = new LinkedHashMap<>(8);
  // 這里只能使用 new 新建實例
  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;
}

接著創建一個 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");
  }
}

啟動項目進行測試,成功登錄。

總結

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一色桃子av大全在线播放 | 欧美一级黄色录相 | 久久精品国产99久久6动漫亮点 | 国产亚洲精品久久 | 午夜精品毛片 | xxxxhdhdhdhd日本 | 国产做爰全免费的视频黑人 | 免费观看一区 | av免费片 | av免费在线网站 | 久久久久久亚洲国产精品 | 久久宗合色 | 国产精品久久av | 中文区永久区 | 最新亚洲视频 | 欧洲伊人网| 亚洲小视频网站 | 性欧美xxxx极品摘花 | 亚洲成人欧美 | 日本xxxx色视频在线观看免费, | 男男啪羞羞视频网站 | 欧美一级高清片在线 | 少妇一级淫片免费放播放 | 在线视频1区 | 精品国产一区二区在线观看 | 国产美女做爰免费视 | 3344永久免费 | 日本精品网 | 亚洲国产精品久久久 | 4p一女两男做爰在线观看 | 国产精品久久久免费观看 | 国产乱一区二区三区视频 | 午夜在线观看视频网站 | 久久久久免费电影 | 亚洲国产精品一 | 婷婷久久青草热一区二区 | 男人午夜小视频 | 免费看污视频在线观看 | 午夜小电影 | 欧美一区在线观看视频 | 亚洲啪 |