shiro低版本更新到高版本(>1.10.0)出现报错问题解决
近期漏洞爆出(Apache Shiro < 1.10.0 身份认证绕过漏洞),开始升级新版的jar包。
升级过程
1.修改pom文件shiro版本
1 2 3 4 5 6 | <!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-starter</artifactId> <version> 1.10 . 0 </version> </dependency> |
2.启动项目报错
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | The dependencies of some of the beans in the application context form a cycle: shiroFilter defined in class path resource [cn/shiro/ShiroConfig. class ] ↓ authorizationAttributeSourceAdvisor defined in class path resource [org/apache/shiro/spring/boot/autoconfigure/ShiroAnnotationProcessorAutoConfiguration. class ] ↓ securityManager defined in class path resource [cn/shiro/ShiroConfig. class ] ↓ customUserValidateRealm (field private cn.mapper.UserMapper cn.shiro.CustomUserValidateRealm.etcMgmtUserMapper) ↓ userMapper defined in file [D:\mapper\UserMapper. class ] ↓ sqlSessionFactory defined in class path resource [tk/mybatis/mapper/autoconfigure/MapperAutoConfiguration. class ] ┌─────┐ | masterDataSource defined in class path resource [cn/config/DataSourceConfig. class ] ↑ ↓ | getMasterDateSource defined in class path resource [cn/config/DataSourceConfig. class ] ↑ ↓ | org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker └─────┘ |
解决方法:
1.在自定义Realm中找到userMapper 注入的地方,添加@Lazy
1 2 3 4 5 6 7 8 | import org.springframework.context.annotation.Lazy; public class CustomUserValidateRealm extends AuthorizingRealm { @Lazy @Autowired private UserMapper mapper; } |
2. 启动项目依旧报错
1 2 3 4 5 | Description: Method filterShiroFilterRegistrationBean in org.apache.shiro.spring.config.web.autoconfigure.ShiroWebFilterConfiguration required a bean named 'shiroFilterFactoryBean' that could not be found. Action: Consider defining a bean named 'shiroFilterFactoryBean' in your configuration. |
3.找到ShiroConfig配置中设置的过滤规则方法(返回ShiroFilterFactoryBean的)给@bean添加name值
1 2 3 4 | @Bean (name= "shiroFilterFactoryBean" ) public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { ...... } |
4.然后再在过滤规则调用方法添加name
1 2 3 4 5 6 7 8 9 | @Bean public FilterRegistrationBean<DelegatingFilterProxy> delegatingFilterProxy() { FilterRegistrationBean<DelegatingFilterProxy> filterRegistrationBean = new FilterRegistrationBean<DelegatingFilterProxy>(); DelegatingFilterProxy proxy = new DelegatingFilterProxy(); proxy.setTargetFilterLifecycle( true ); proxy.setTargetBeanName( "shiroFilterFactoryBean" ); filterRegistrationBean.setFilter(proxy); return filterRegistrationBean; } |
启动项目,问题解决!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律