Shiro报错 No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util

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();.
Here Insert Picture Description

3, the solution

①, check whether SecurityManager

There are two SecurityManager configuration, one is declared in the spring xml configuration file.
Here Insert Picture Description
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();
	}
}

Note \ Color {red} Note: only about the above configuration,

c o p y \ Color {red} Please be modified according to your project, not directly copy.

\color{red}两种方式配置一种即可!

②、检查web.xml文件中是否添加shiro过滤器

Here Insert Picture Description

③、检查web.xml文件中shiro过滤器申明顺序

S e c u r i t y M a n a g e r s h i r o \color{red}如果你配置了SecurityManager、shiro过滤器,

\ Color {red} but still error!

Here Insert Picture Description
Turned over several hours. . .
The point is not to praise can not be resolved, / manual funny / manual funny!

Published 976 original articles · won praise 230 · Views 200,000 +

Guess you like

Origin blog.csdn.net/qq_41855420/article/details/104057010