- @WebFilter(filterName = "TestAFilter", urlPatterns = "/v1/testA/*")
- @Order(1)
- public class TestAFilter extends OncePerRequestFilter{
- @Autowired
- private MyService myService;
-
- @Override
- protected void doFilterInternal(...){...}
- }
-
- @WebFilter(filterName = "TestBFilter", urlPatterns = "/v1/testB/*")
- @Order(2)
- public class TestBFilter extends OncePerRequestFilter{
- @Autowired
- private MyService myService;
-
- @Override
- protected void doFilterInternal(...){...}
- }
- @ServletComponentScan(basePackages = {"**.*"})
- @EnableScheduling
- @EnableAsync
- public class MyApplication {...}
好处:无需在Filter上增加@Component,Aserver也能注入,因为@WebFilter会交给Spring管理
坏处1:@Order有时候不生效,参考:关于@webFilter使用@Order无效问题 - oKong_趔趄的猿 - 博客园
坏处2:不小心在Fiter上加了@Component会导致urlPatterns失效,拦截所有的接口
① Config
- @Configuration
- public class InstFilterConfig {
-
- @Autowired
- private MyService myService;
-
- @Bean
- public FilterRegistrationBean
testAFilter() { - FilterRegistrationBean
bean = new FilterRegistrationBean<>(); - bean.setFilter(new TestAFilter(myService));
- bean.setName("TestAFilter");
- bean.addUrlPatterns("/v1/testA/*");
- bean.setOrder(1);
- return bean;
- }
-
- @Bean
- public FilterRegistrationBean
testBFilter() { - FilterRegistrationBean
bean = new FilterRegistrationBean<>(); - bean.setFilter(new TestBFilter(myService));
- bean.setName("TestBFilter");
- bean.addUrlPatterns("/v1/testB/*");
- bean.setOrder(2);
- return bean;
- }
-
- }
② FilterA
- public class TestAFilter extends OncePerRequestFilter{
- private MyService myService;
- public TestAFilter(MyService myService){
- this.myService= myService;
- }
-
- @Override
- protected void doFilterInternal(...){...}
- }
② FilterB
- public class TestBFilter extends OncePerRequestFilter{
- private MyService myService;
- public TestBFilter(MyService myService){
- this.myService= myService;
- }
-
- @Override
- protected void doFilterInternal(...){...}
- }
好处大大的!
另外:对于拦截器全局异常无法捕获可以按照如下方法解决:spring boot 项目在自定义Filter中抛出异常捕获不到的处理方法_Rum chen的博客-CSDN博客
最后:拦截器拦截请求作为全局变量参考:
Springboot中的拦截器获取请求头的数据_无情的搬砖机器的博客-CSDN博客_springboot 拦截器获取请求头