Shiro 报错
1, error details
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.
at org.apache.shiro.SecurityUtils.getSecurityManager(SecurityUtils.java:123)
at org.apache.shiro.subject.Subject$Builder.<init>(Subject.java:627)
at org.apache.shiro.SecurityUtils.getSubject(SecurityUtils.java:56)
2, error scenario
Struts2 + Spring + Hibernate integration framework Shiro error.
UserAction login method given position in the class Subject subject = SecurityUtils.getSubject();
.
3, the solution
①, check whether SecurityManager
There are two SecurityManager configuration, one is declared in the spring xml configuration file.
Another is to write Shiro configuration class, be declared using annotations
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean getBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager){
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
bean.setSecurityManager(securityManager);
bean.setLoginUrl("/login.jsp");
Map<String,String> filterMap = new LinkedHashMap<>();
filterMap.put("/login","anon");
filterMap.put("/*","authc");
bean.setFilterChainDefinitionMap(filterMap);
return bean;
}
@Bean("securityManager")
public DefaultWebSecurityManager getSecurityManage(@Qualifier("accountRealm")AccountRealm accountRealm){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(accountRealm);
return securityManager;
}
@Bean("accountRealm")
public AccountRealm getAccountRealm(){
return new BosRealm();
}
}
②、检查web.xml文件中是否添加shiro过滤器
③、检查web.xml文件中shiro过滤器申明顺序
Turned over several hours. . .
The point is not to praise can not be resolved, / manual funny / manual funny!