Spring Boot针对Servlet、Filter等,有几种注册方法
- 使用
@WebFilter
、@WebServlet
、@WebListener
注解来标识类 - 使用
FilterRegistrationBean
、ServletRegistrationBean
来对Filter
、Servlet
进行自定义注册 - 使用
@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对Filter
,Servlet
提供了相应的注册类,来进行精细化的配置,我们可以使用注册类来取消Filter的自动注册。
通过使用FilterRegistrationBean
来进行Filter的注册,同时,设置enabled为false,就可以取消Filter的自动注册行为了。
public FilterRegistrationBean registration(MyFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setEnabled(false);
return registration;
}
参考资料:
Spring Boot Document
网友评论