SpringBoot 过滤器 Filter

springBoot配置多个过滤器filter的执行顺序

1、自定义过滤器

过滤器类实现 javax.servlet.Filter。然后添加注解 @WebFilter(filterName=“过滤器名称” urlPatterns=“过滤规则” )
@Order(int) 注解,配合 @WebFilter 注解使用,用于多个过滤器时定义执行顺序,值越小越先执行。

2、添加 @ServletComponentScan 注解

在启动类上加一个注解 @ServletComponentScan(basePackages=“需要扫描的过滤器”)

3、多个过滤器如何指定执行顺序?

使用@Order注解来设置过滤器的执行顺序,是无效的!

使用@Order注解指定一个int值,越小越先执行。很多博客文章都是这么说的,但你真正的试了吗?真的可以使用这个注解指定顺序吗?答案是否定的。

经过测试,发现 @Order 注解指定 int 值没有起作用,是无效的。为啥?因为看源码发现 @WebFilter 修饰的过滤器在加载时,没有使用 @Order 注解,而是使用的类名来实现自定义Filter顺序
所以这种方式下想定义Filter的顺序,就必须限定 Filter 的类名,比如刚才那个 Filter 叫 Filter01,假如我们现在新写了一个 Filter 叫 Filter02,那么顺序就是 Filter01> Filter02。

所以这种方式虽然实现起来简单,只需要注解,但自定义顺序就必须要限定类名,使用类名达到排序效果了。

4、配置多个过滤器的执行顺序

@Configuration
public class FilterConfig{

@Bean
public FilterRegistrationBean Filter01(){
	FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
	filterRegistrationBean.setFilter(new Filter01());//设置过滤器名称
	filterRegistrationBean.addUrlPatterns("/*");//配置过滤规则
	filterRegistrationBean.setOrder(1); //order的数值越小 则优先级越高
	return filterRegistrationBean;
}
@Bean
public FilterRegistrationBean Filter02(){
	FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
	filterRegistrationBean.setFilter(new Filter02());
	filterRegistrationBean.addUrlPatterns("/*");
	filterRegistrationBean.setOrder(2);
	return filterRegistrationBean;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值