Spring Boot:取消Filter自动注册

Spring Boot针对Servlet、Filter等,有几种注册方法
  1. 使用@WebFilter@WebServlet@WebListener注解来标识类
  2. 使用FilterRegistrationBeanServletRegistrationBean来对FilterServlet进行自定义注册
  3. 使用@Bean来自动添加,添加后默认的过滤路径为 /*

对于一般场景,使用第三种方式是最简单的,不过如果有特殊的定制需求,那么就不能满足了。

在Spring Boot中使用Shiro,提供了自定义的Filter来进行权限控制,同时,希望该自定义Filter能作为Spring Bean,以便获得Spring Bean的相关益处,比如可以使用@Autowired进行Bean的注入等。

@Bean
public MyFilter getMyFilter() {    
    return new MyFilter();
}

但这里遇到了一个问题,自定义Filter通过@Bean注解后,被Spring Boot自动注册到了容器的Filter chain中,这样导致的结果是,所有URL都会被自定义Filter过滤,而不是Shiro中配置的一部分URL。

怎么取消Filter自动注册?

Spring Boot对FilterServlet提供了相应的注册类,来进行精细化的配置,我们可以使用注册类来取消Filter的自动注册。
通过使用FilterRegistrationBean来进行Filter的注册,同时,设置enabled为false,就可以取消Filter的自动注册行为了。

public FilterRegistrationBean registration(MyFilter filter) {  
    FilterRegistrationBean registration = new FilterRegistrationBean(filter); 
    registration.setEnabled(false); 
    return registration;
}

参考资料:
Spring Boot Document

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容