Shiro整合Springboot和redis,jwt過程中的錯誤shiroFilterChainDefinition問題
Shiro整合Springboot和redis,jwt過程錯誤shiroFilterChainDefinition
在Shiro整合Springboot和redis,jwt過程中,編寫完成ShiroConfig之后啟動項(xiàng)目報錯
Description:
Field shiroFilterChainDefinition in org.apache.shiro.spring.web.config.AbstractShiroWebFilterConfiguration required a bean of type 'org.apache.shiro.spring.web.config.ShiroFilterChainDefinition' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)Action:
Consider defining a bean of type 'org.apache.shiro.spring.web.config.ShiroFilterChainDefinition' in your configuration.
原因
使用了如下依賴之后,自定義的Realm竟然和authorizer沖突了
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<version>1.4.0-RC2</version>
</dependency>
或者
<dependency>
<groupId>org.crazycake</groupId>
<artifactId>shiro-redis-spring-boot-starter</artifactId>
<version>3.2.1</version>
</dependency>解決方法
在ShiroConfig文件中的getShiroFilterFactoryBean方法上加注解@Bean(“shiroFilterFactoryBean”)
@Bean("shiroFilterFactoryBean")
public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager){
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);
Map<String,String> map = new HashMap<>();
map.put("/user/login","anon");
map.put("/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
return shiroFilterFactoryBean;
}
如果無法解決,則在ShiroConfig中單獨(dú)寫一個ShiroFilterChainDefinition的bean
@Bean("shiroFilterFactoryBean")
public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager,ShiroFilterChainDefinition shiroFilterChainDefinition){
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);
// 添加自己的過濾器并且取名為jwt
Map<String, Filter> filters = new HashMap<>();
//設(shè)置我們自定義的JWT過濾器
filters .put("jwt", new JwtFilter());
shiroFilterFactoryBean.setFilters(filters );
shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);
Map<String, String> filterMap = shiroFilterChainDefinition.getFilterChainMap();
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
return shiroFilterFactoryBean;
}
@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
Map<String, String> filterMap = new LinkedHashMap<>();
filterMap.put("/**", "jwt"); // 主要通過注解方式校驗(yàn)權(quán)限
chainDefinition.addPathDefinitions(filterMap);
return chainDefinition;
}
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
- 如何使用jwt+redis實(shí)現(xiàn)單點(diǎn)登錄
- 使用Redis實(shí)現(xiàn)JWT令牌主動失效機(jī)制
- SpringSecurity+Redis+Jwt實(shí)現(xiàn)用戶認(rèn)證授權(quán)
- jwt+redis實(shí)現(xiàn)登錄認(rèn)證的示例代碼
- 基于 Redis 的 JWT令牌失效處理方案(實(shí)現(xiàn)步驟)
- springboot+springsecurity+mybatis+JWT+Redis?實(shí)現(xiàn)前后端離實(shí)戰(zhàn)教程
- SpringBoot整合SpringSecurity和JWT和Redis實(shí)現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證
- SpringSecurity+jwt+redis基于數(shù)據(jù)庫登錄認(rèn)證的實(shí)現(xiàn)
- java實(shí)現(xiàn)認(rèn)證與授權(quán)的jwt與token+redis,哪種方案更好用?
相關(guān)文章
通過Mybatis實(shí)現(xiàn)單表內(nèi)一對多的數(shù)據(jù)展示示例代碼
最近做項(xiàng)目遇到這樣的需求要求將表中的數(shù)據(jù),按照一級二級分類返回給前端json數(shù)據(jù),下面通過本文給大家分享通過Mybatis實(shí)現(xiàn)單表內(nèi)一對多的數(shù)據(jù)展示示例代碼,感興趣的朋友參考下吧2017-08-08
java項(xiàng)目idea構(gòu)建總是報內(nèi)存溢出怎么解決詳析
這篇文章主要介紹了java項(xiàng)目idea構(gòu)建總是報內(nèi)存溢出怎么解決的相關(guān)資料,方法包括增加IDEA內(nèi)存分配、調(diào)整項(xiàng)目編譯設(shè)置、配置Gradle構(gòu)建內(nèi)存、優(yōu)化項(xiàng)目結(jié)構(gòu)、清理不必要的依賴、使用命令行構(gòu)建、更新IDEA和JDK、清理IDEA緩存和禁用不必要的插件,需要的朋友可以參考下2025-03-03
springCloud服務(wù)注冊Eureka實(shí)現(xiàn)過程圖解
這篇文章主要介紹了springCloud服務(wù)注冊Eureka實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
Java源碼解析之Gateway請求轉(zhuǎn)發(fā)
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Gateway請求轉(zhuǎn)發(fā)展開,文中有非常詳細(xì)介紹及代碼示例,需要的朋友可以參考下2021-06-06

