Spring Boot整合shiro,出現UnavailableSecurityManagerException 異常
阿新 • • 發佈:2019-01-04
問題描述:
由於在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; } }