spring---自定义Filter有两种方式
前言
在我们开发中经常需要对请求做一些自定义的过滤处理,如最常见的jwt每次请求进来我们都需要去解析判断token这个时候肯定就需要自定义一个filter去处理。spring为我们提供了两种自定义filter方式,一种是基于注解@WebFilter,一种是手动注册bean的方式。
一、基于注解
基于注解的方式相对步骤简单些,但是由于它的一些局限性生产中基本见不到其身影。大致只需要三步骤:
1、实现Filter接口(javax.servlet) 2、添加@WebFilter注解 3、启动类添加@ServletComponentScan注解
注意:
-
1、不加@ServletComponentScan注解无法注入Filter,这个注解的作用就是去扫描@WebServlet、@WebFilter、@WebListener这类特殊注解。如果不加,spring容器是不会主动扫描的 2、多个Filter的执行顺序,说出来你可能不信,这种注解方式实现的Filter是通过Filter的类名首字母来控制执行顺序的,像Filter1_Filter就比Filter2_Filter先执行。但网上一些资料说,当Filter数量很多时,是没有明确的执行顺序的,所以这种方式还是放弃吧,推荐第二种
二、注册bean
@Bean public FilterRegistrationBean<AuthenticationTokenFilter> registration(AuthenticationTokenFilter filter) { FilterRegistrationBean<AuthenticationTokenFilter> authenticationTokenFilter = new FilterRegistrationBean<>(filter); // 设置拦截哪些 URL // filter.addUrlPatterns("/*"); //order的数值越小,在所有的filter中优先级越高 authenticationTokenFilter.setOrder(0); authenticationTokenFilter.setEnabled(true); return authenticationTokenFilter; }
上一篇:
IDEA上Java项目控制台中文乱码