使用shiro-spring-boot-web-starter时,报错: required a bean named ‘authorizer’ that could not be found.
原来报错代码:
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(realm());
return securityManager;
}
修改后:
@Bean
public SessionsSecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(realm());
return securityManager;
}
区别:
错误的securityManager
返回类型为org.apache.shiro.mgt.SecurityManager
正确的securityManager
返回类型为org.apache.shiro.mgt.SessionsSecurityManager
原因:
在starter的org.apache.shiro.spring.config.web.autoconfigure
类已经定义了securityManager
,代码如下:
@Bean
@ConditionalOnMissingBean
protected SessionsSecurityManager securityManager(List<Realm> realms) {
return super.securityManager(realms);
}
也就是securityManager
的类型是SessionsSecurityManager
或者SessionsSecurityManager
的子类才不会去定义securityManager
对象