问题描述
springboot整合shiro报错
@Bean
public SessionsSecurityManager securityManager() {
DefaultWebSecurityManager securityManager =
new DefaultWebSecurityManager();
securityManager.setRealm(userRealm());
// 我引入的是 shiro-spring-boot-web-starter
// 在junit测试下 这个要加上 但是 在controller里面加不加都可以
// ThreadContext.bind(securityManager);
return securityManager;
}
org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bound to the
org.apache.shiro.util.ThreadContext or as a vm static singleton. This is an invalid application configuration.
原因分析:
我引入的是shiro-spring-boot-web-starter ,在web controller的环境下不会出现这个错误。
解决方案:
我们可以手动绑定SecurityManager
在配置SessionsSecurityManager加入 ThreadContext.bind(securityManager);
@Bean
public SessionsSecurityManager securityManager() {
DefaultWebSecurityManager securityManager =
new DefaultWebSecurityManager();
securityManager.setRealm(userRealm());
// 我引入的是 shiro-spring-boot-web-starter
// 在junit测试下 这个要加上 但是 在controller里面加不加都可以
ThreadContext.bind(securityManager);
return securityManager;
}