使用shiro-spring-boot-web-starter报错bean named 'authorizer' that could not be found

本文探讨了在使用shiro-spring-boot-web-starter时遇到的“authorizer”bean未定义的问题,深入分析其原因并提供两种解决方案,帮助开发者避免类似陷阱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人在使用spring boot  + shiro时,为了省时间,懒得写shiro的配置bean,就依赖了shiro-spring-boot-web-starter,结果出了以下问题:

使用的依赖包为

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring-boot-web-starter</artifactId>
    <version>1.4.0</version>
</dependency>

控制台日志输出的报错位置如下:

由于底层会调用spring的ConfigurationClassEnhancer$BeanMethodInterceptor拦截器进行判断是否有bean名称为:authorizer的bean,但是又找不到这个bean对象,所以报出了,bean对象没有定义。

那又是为什么会出现这种情况呢?一切都是因为以下注解引起的

很多人很奇怪,为什么是这个注解引起的,它只是表示说,如果没有Authorizer的实现对象时,走此方法实现一个Authorizer的对象,bean对象名称为:authorizer。但是由于我们在使用shiro时,一般都会去实现一个Realm对象,并且一般都是去继承于虚拟类AuthorizingRealm。AuthorizingRealm这个虚拟类正好实现了接口Authorizer,说到这边,大家伙应该明白是什么问题了吧?

spring boot在启动的时候,发现已经有一个Authorizer的实现bean对象了。就没有去走这个方法了,也就没有了bean名称为authorizer的对象了。

说了那么多,笔者有两个解决方案,

方案1:自己实现一个SessionsSecurityManager对象,这样就不会走默认的SessionsSecurityManager实现了。

方案2:给你的Realm对象,也就是继承于AuthorizingRealm(或者是其他的实现了接口Authorizer)的对象,命名为:authorizer。

例如:

 

如有错误,请留言指出,笔者万分感谢。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值