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

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

使用的依赖包为


    org.apache.shiro
    shiro-spring-boot-web-starter
    1.4.0

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

使用shiro-spring-boot-web-starter报错bean named 'authorizer' that could not be found_第1张图片

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

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

使用shiro-spring-boot-web-starter报错bean named 'authorizer' that could not be found_第2张图片

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

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

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

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

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

例如:

 

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

你可能感兴趣的:(spring,boot,shiro)