@@ -78,6 +78,8 @@ public class MyFilter implements Filter {
7878
7979` MyFilterConfig.java `
8080
81+ 在配置中注册自定义的过滤器。
82+
8183``` java
8284@Configuration
8385public class MyFilterConfig {
@@ -112,3 +114,86 @@ public class MyFilterWithAnnotation implements Filter {
112114
113115### 4.定义多个拦截器,并决定它们的执行顺序
114116
117+ 加入我们现在又加入了一个过滤器怎么办?
118+
119+ ` MyFilter2.java `
120+
121+ ``` java
122+ @Component
123+ public class MyFilter2 implements Filter {
124+ private static final Logger logger = LoggerFactory . getLogger(MyFilter2 . class);
125+
126+ @Override
127+ public void init (FilterConfig filterConfig ) {
128+ logger. info(" 初始化过滤器2" );
129+ }
130+
131+ @Override
132+ public void doFilter (ServletRequest servletRequest , ServletResponse servletResponse , FilterChain filterChain ) throws IOException , ServletException {
133+ // 对请求进行预处理
134+ logger. info(" 过滤器开始对请求进行预处理2:" );
135+ HttpServletRequest request = (HttpServletRequest ) servletRequest;
136+ String requestUri = request. getRequestURI();
137+ System . out. println(" 请求的接口为2:" + requestUri);
138+ long startTime = System . currentTimeMillis();
139+ // 通过 doFilter 方法实现过滤功能
140+ filterChain. doFilter(servletRequest, servletResponse);
141+ // 上面的 doFilter 方法执行结束后用户的请求已经返回
142+ long endTime = System . currentTimeMillis();
143+ System . out. println(" 该用户的请求已经处理完毕,请求花费的时间为2:" + (endTime - startTime));
144+ }
145+
146+ @Override
147+ public void destroy () {
148+ logger. info(" 销毁过滤器2" );
149+ }
150+ }
151+
152+ ```
153+
154+ 在配置中注册自定义的过滤器,通过` FilterRegistrationBean ` 的` setOrder ` 方法可以决定 Filter 的执行顺序。
155+
156+ ``` java
157+ @Configuration
158+ public class MyFilterConfig {
159+ @Autowired
160+ MyFilter myFilter;
161+
162+ @Autowired
163+ MyFilter2 myFilter2;
164+
165+ @Bean
166+ public FilterRegistrationBean<MyFilter > setUpMyFilter () {
167+ FilterRegistrationBean<MyFilter > filterRegistrationBean = new FilterRegistrationBean<> ();
168+ filterRegistrationBean. setOrder(2 );
169+ filterRegistrationBean. setFilter(myFilter);
170+ filterRegistrationBean. setUrlPatterns(new ArrayList<> (Arrays . asList(" /api/*" )));
171+
172+ return filterRegistrationBean;
173+ }
174+
175+ @Bean
176+ public FilterRegistrationBean<MyFilter2 > setUpMyFilter2 () {
177+ FilterRegistrationBean<MyFilter2 > filterRegistrationBean = new FilterRegistrationBean<> ();
178+ filterRegistrationBean. setOrder(1 );
179+ filterRegistrationBean. setFilter(myFilter2);
180+ filterRegistrationBean. setUrlPatterns(new ArrayList<> (Arrays . asList(" /api/*" )));
181+ return filterRegistrationBean;
182+ }
183+ }
184+ ```
185+
186+ 实际测试效果如下:
187+
188+ ``` shell
189+ 2019-10-22 22:32:15.569 INFO 1771 --- [ main] g.j.springbootfilter.filter.MyFilter2 : 初始化过滤器2
190+ 2019-10-22 22:32:15.569 INFO 1771 --- [ main] g.j.springbootfilter.filter.MyFilter : 初始化过滤器
191+ 2019-10-22 22:32:55.199 INFO 1771 --- [nio-8080-exec-1] g.j.springbootfilter.filter.MyFilter2 : 过滤器开始对请求进行预处理2:
192+ 请求的接口为2:/api/hello
193+ 2019-10-22 22:32:55.199 INFO 1771 --- [nio-8080-exec-1] g.j.springbootfilter.filter.MyFilter : 过滤器开始对请求进行预处理:
194+ 请求的接口为:/api/hello
195+ 该用户的请求已经处理完毕,请求花费的时间为:1037
196+ 该用户的请求已经处理完毕,请求花费的时间为2:1037
197+ ```
198+
199+ 源代码地址:
0 commit comments