【SpringBoot】过滤器Filter使用方式及遇到的不过滤路径问题
在springboot中使用过滤器Filter有两种方式:1、使用@WebFilter注解方式来配置。2、在启动类中使用@Bean方式配置。一、@WebFilter注解方式@Component@WebFilter(urlPatterns = "/test/list", filterName = "authFilter")public class AuthFilter implement...
在springboot中使用过滤器Filter有两种方式:
1、使用@WebFilter注解方式来配置。
2、在启动类中使用@Bean方式配置。
一、@WebFilter注解方式
@Component
@WebFilter(urlPatterns = "/test/list", filterName = "testFilter")
public class TestFilter implements Filter {
......
}
网上有说使用这种方法配置过滤器,自己试了一下,发起请求时确实进到过滤器里来了,但是并没有按照“/test/list”路径进行过滤,而是过滤了所有URL请求。在百度之后找到解决方案如下:
解决方法:
首先,在上边TestFilter类上加@WebFilter注解是没错的,但是不要加@Component注解,然后在springboot的启动类上加上注解 @ServletComponentScan即可过滤指定路径。
原因:
如果添加了@Component或@Configuration,又添加了@WebFilter(),那么会初始化两次Filter,并且会过滤所有路径+自己指定的路径 ,便会出现对没有指定的URL也会进行过滤的情况。
注:@ServletComponentScan注解的含义:在SpringBootApplication(启动类)上使用@ServletComponentScan注解后,Servlet、Filter(过滤器)、Listener(监听器)可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码!
二、@Bean注解方式
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean(new TestFilter());
registration.addUrlPatterns("/test/list");
registration.setName("testFilter");
return registration;
}
在启动类中写上上述代码即可。
当有多个过滤器时可以通过registration.setOrder(1); 来设定过滤器执行顺序。当指定order时,Filter的执行顺序和注册顺序是无关的。order数字越小,优先级越高!
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean(new TestFilter());
registration.addUrlPatterns("/test/list");
registration.setName("testFilter");
registration.setOrder(1);
return registration;
}
参考博文:
https://blog.csdn.net/testcs_dn/article/details/80265196
https://blog.csdn.net/east123321/article/details/79694974
更多推荐
所有评论(0)