@@ -78,6 +78,8 @@ public class MyFilter implements Filter {
78
78
79
79
` MyFilterConfig.java `
80
80
81
+ 在配置中注册自定义的过滤器。
82
+
81
83
``` java
82
84
@Configuration
83
85
public class MyFilterConfig {
@@ -112,3 +114,86 @@ public class MyFilterWithAnnotation implements Filter {
112
114
113
115
### 4.定义多个拦截器,并决定它们的执行顺序
114
116
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