自定义shiro过滤器被spring抢占导致无限拦截
自定义shiro过滤器时,不能使用@Bean自动注入,使用@Bean就交给spring管理了,而我们本意是将过滤器交给shiro管理。
/**
* 自定义过滤器不要使用@Bean自动注入,应该手动调用方法创建logoutCustomFilter()。
* 使用自动注入就交给spring管理了,而我们本意是交给shiro管理
* @param shiroCacheManager
* @return
*/
// @Bean
private LogoutCustomFilter logoutCustomFilter(ShiroCacheManager shiroCacheManager) {
LogoutCustomFilter logoutCustomFilter = new LogoutCustomFilter();
logoutCustomFilter.setShiroCacheManager(shiroCacheManager);
logoutCustomFilter.setRedirectUrl("/toLogin");
return logoutCustomFilter;
}
原因
官方解释
翻译
如前所述,任何Servlet或过滤器bean都会自动注册到Servlet容器中。要禁用特定过滤器或Servlet bean的注册,请为其创建注册bean并将其标记为禁用,如以下示例所示:《代码段》
解决
- 不使用自动注入
- 按官方文档禁用该bean
ajax请求无法重定向
ajax请求无法重定向,应该使用jquery的get或post方法进行请求。