1. 程式人生 > >Spring Boot整合shiro,出現UnavailableSecurityManagerException 異常

Spring Boot整合shiro,出現UnavailableSecurityManagerException 異常

問題描述:

由於在java過濾器中通過User token = (User) SecurityUtils.getSubject().getPrincipal();獲取當前的登入使用者的資訊,報UnavailableSecurityManagerException這個異常。

spring整合shiro出現UnavailableSecurityManagerException在網上查出的問題都是沒有配置DelegatingFilterProxy或者DelegatingFilterProxy的配置順序錯了,對應的解決辦法就是在web.xml上新增DelegatingFilterProxy。

<filter>
    <filter-name>shiroFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <async-supported>true</async-supported>
    <init-param>
             <param-name>targetFilterLifecycle</param-name>
             <param-value>true</param-value>
     </init-param>
</filter>
<filter-mapping>
    <filter-name>shiroFilter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>

現在是spring boot框架裡沒有web.xml,所以解決起來直接寫程式碼就可以了

@Configuration
public class ShiroConfiguration {
@Bean
public FilterRegistrationBean delegatingFilterProxy(){
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
    DelegatingFilterProxy proxy = new DelegatingFilterProxy();
    proxy.setTargetFilterLifecycle(true);
    proxy.setTargetBeanName("shiroFilter");
    filterRegistrationBean.setFilter(proxy);
    return filterRegistrationBean;
}

@Bean("shiroFilter")
public ShiroFilterFactoryBean shiroFilterFactoryBean() {
    ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean();
    .......
    return filterFactoryBean;
}
}