1
1
### 1. Filter 介绍
2
2
3
- Filter 过滤器这个概念应该大家不会陌生,特别是对与从 Servlet 开始入门学 Java 后台的同学来说。那么这个东西我们能做什么呢?Filter 过滤器主要是用来过滤用户请求的,它允许我们对用户请求进行前置处理和后置处理,比如实现 URL 级别的权限控制、过滤非法请求等等。Filter 过滤器是面向切面编程——AOP的具体实现 (AOP切面编程只是一种编程思想而已)。
3
+ Filter 过滤器这个概念应该大家不会陌生,特别是对与从 Servlet 开始入门学 Java 后台的同学来说。那么这个东西我们能做什么呢?Filter 过滤器主要是用来过滤用户请求的,它允许我们对用户请求进行前置处理和后置处理,比如实现 URL 级别的权限控制、过滤非法请求等等。Filter 过滤器是面向切面编程——AOP 的具体实现 (AOP切面编程只是一种编程思想而已)。
4
4
5
5
另外,Filter 是依赖于 Servlet 容器,` Filter ` 接口就在 Servlet 包下面,属于 Servlet 规范的一部分。所以,很多时候我们也称其为“增强版 Servlet”。
6
6
@@ -35,11 +35,11 @@ public interface Filter {
35
35
36
36
### 3. 如何自定义Filter
37
37
38
- 下面提供两种方法。
38
+ 下面提供两种方法。
39
39
40
40
#### 3.1自己手动注册配置实现
41
41
42
- 自定义的 Filter 需要实现` javax.Servlet.Filter ` 接口,并重写接口中定义的3个方法。
42
+ ** 自定义的 Filter 需要实现` javax.Servlet.Filter ` 接口,并重写接口中定义的3个方法。**
43
43
44
44
` MyFilter.java `
45
45
@@ -80,7 +80,7 @@ public class MyFilter implements Filter {
80
80
81
81
` MyFilterConfig.java `
82
82
83
- 在配置中注册自定义的过滤器。
83
+ ** 在配置中注册自定义的过滤器。**
84
84
85
85
``` java
86
86
@Configuration
@@ -102,7 +102,7 @@ public class MyFilterConfig {
102
102
103
103
#### 3.2 通过提供好的一些注解实现
104
104
105
- 在自己的过滤器的类上加上` @WebFilter ` 然后在这个注解中通过它提供好的一些参数进行配置。
105
+ ** 在自己的过滤器的类上加上` @WebFilter ` 然后在这个注解中通过它提供好的一些参数进行配置。**
106
106
107
107
``` java
108
108
@WebFilter (filterName = " MyFilterWithAnnotation" , urlPatterns = " /api/*" )
@@ -116,7 +116,7 @@ public class MyFilterWithAnnotation implements Filter {
116
116
117
117
### 4.定义多个拦截器,并决定它们的执行顺序
118
118
119
- 加入我们现在又加入了一个过滤器怎么办?
119
+ ** 假如我们现在又加入了一个过滤器怎么办? **
120
120
121
121
` MyFilter2.java `
122
122
@@ -153,7 +153,7 @@ public class MyFilter2 implements Filter {
153
153
154
154
```
155
155
156
- 在配置中注册自定义的过滤器,通过` FilterRegistrationBean ` 的` setOrder ` 方法可以决定 Filter 的执行顺序。
156
+ ** 在配置中注册自定义的过滤器,通过` FilterRegistrationBean ` 的` setOrder ` 方法可以决定 Filter 的执行顺序。**
157
157
158
158
``` java
159
159
@Configuration
@@ -185,7 +185,26 @@ public class MyFilterConfig {
185
185
}
186
186
```
187
187
188
- 实际测试效果如下:
188
+ ** 自定义 Controller 验证过滤器**
189
+
190
+ ``` java
191
+ import org.springframework.web.bind.annotation.GetMapping ;
192
+ import org.springframework.web.bind.annotation.RequestMapping ;
193
+ import org.springframework.web.bind.annotation.RestController ;
194
+
195
+ @RestController
196
+ @RequestMapping (" /api" )
197
+ public class MyController {
198
+
199
+ @GetMapping (" /hello" )
200
+ public String getHello () throws InterruptedException {
201
+ Thread . sleep(1000 );
202
+ return " Hello" ;
203
+ }
204
+ }
205
+ ```
206
+
207
+ ** 实际测试效果如下:**
189
208
190
209
``` shell
191
210
2019-10-22 22:32:15.569 INFO 1771 --- [ main] g.j.springbootfilter.filter.MyFilter2 : 初始化过滤器2
@@ -198,4 +217,3 @@ public class MyFilterConfig {
198
217
该用户的请求已经处理完毕,请求花费的时间为2:1037
199
218
```
200
219
201
- 源代码地址:https://github.com/Snailclimb/springboot-guide/tree/master/source-code/basis/springboot-filter
0 commit comments