国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

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

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

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

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

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

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

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

問題一:JwtTokenFilter 無法使用 @Autowired

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

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

1@Bean
2public JwtTokenFilter JwtTokenFilter() {
3  return new JwtTokenFilter();
4}

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

問題二:anon 過濾器失效

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

01@Bean(name = "shiroFilter")
02public ShiroFilterFactoryBean shiroFilterFactoryBean() {
03  ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
04  shiroFilterFactoryBean.setSecurityManager(securityManager());
05  // 注冊自定義過濾器
06  Map<String, Filter> filterMap = new LinkedHashMap<>(8);
07  // 這里只能使用 new 新建實例
08  filterMap.put("authc", new JwtTokenFilter());
09  shiroFilterFactoryBean.setFilters(filterMap);
10  Map<String, String> filterChains = new LinkedHashMap<>(8);
11  filterChains.put("/v1/admin/login", "anon");
12  filterChains.put("/**", "authc");
13  shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChains);
14  return shiroFilterFactoryBean;
15}

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

01package com.nwgdk.ums.common.util;
02import org.springframework.beans.BeansException;
03import org.springframework.context.ApplicationContext;
04import org.springframework.context.ApplicationContextAware;
05import org.springframework.stereotype.Component;
06/**
07 * Spring 上下文工具類
08 *
09 * @author nwgdk
10 */
11@Component
12public class SpringContextUtil implements ApplicationContextAware {
13  private static ApplicationContext applicationContext;
14  @Override
15  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
16    SpringContextUtil.applicationContext = applicationContext;
17  }
18  /**
19   * 獲取上下文
20   */
21  public static ApplicationContext getApplicationContext() {
22    return applicationContext;
23  }
24  /**
25   * 通過 bena 名稱獲取上下文中的 bean
26   */
27  public static Object getBean(String name) {
28    return applicationContext.getBean(name);
29  }
30  /**
31   * 通過類型獲取上下文中的bean
32   */
33  public static Object getBean(Class<?> requiredType) {
34    return applicationContext.getBean(requiredType);
35  }
36}

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

1if (StringUtils.isNotEmpty(jwtToken)) {
2  if (jwtUtil == null) {
3    jwtUtil = (JwtUtil) SpringContextUtil.getBean("jwtUtil");
4  }
5}

啟動項目進(jìn)行測試,成功登錄。

總結(jié)

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

延伸 · 閱讀

精彩推薦
458
主站蜘蛛池模板: 啊啊啊网站 | 国偷自产av一区二区三区 | av一区二区三区 | 成人午夜视频免费 | 久久中文字幕在线观看 | 91视频专区 | 亚洲人人 | 日韩欧美一区二区三区 | 久久久91精品国产一区二区三区 | 久久久免费电影 | 日韩欧美国产综合 | 国产999精品久久久久久麻豆 | 黄色av一级片 | 日韩电影一区二区三区 | 亚洲成人精品一区 | 亚洲免费成人 | 夜夜操天天操 | 国产精品一区在线 | 色视频在线看 | 一级黄色片在线 | 国产精品一区久久久 | 夜夜操av | 91亚洲国产成人久久精品网站 | 久久99精品久久久久久久青青日本 | 日韩一区二区影视 | 欧美一区二区三区在线视频观看 | 中文字幕在线播放一区 | 明里在线观看 | 日韩在线免费视频 | 亚洲精品日韩综合观看成人91 | 国产精品久久久91 | 精品96久久久久久中文字幕无 | 久久中文字幕一区 | 中文字幕日韩视频 | 一区二区视频 | 久久久久中文字幕 | 综合中文字幕 | 久久精品亚洲精品 | 成人午夜电影网 | 中文字幕国产视频 | 99热最新网站 |