1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > springBoot配置多个过滤器filter的执行顺序

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

时间:2022-06-16 17:51:59

相关推荐

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、配置多个过滤器的执行顺序

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。