每日小结
#Spring 中 Filter 和 Interceptor 的区别
Filter 和 Interceptor 都可以实现对请求的拦截
#功能定位
都可以用来实现用户认证
#区别
定义规范不同
Filter 是 Servlet 的规范; 而 Interceptor 是 Spring 框架提供的类似的拦截器
拦截范围不同
Filter 的拦截范围是 Servlet 层; Interceptor 的拦截范围是 Controller 层
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27│ ▲
▼ │
┌───────┐
│Filter1│
└───────┘
│ ▲
▼ │
┌───────┐
│Filter2│
└───────┘
│ ▲
▼ │
┌─────────────────┐
│DispatcherServlet│<───┐
└─────────────────┘ │
│ ┌────────────┐
│ │ModelAndView│
│ └────────────┘
│ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ┐ ▲
│ ┌───────────┐ │
├─┼─>│Controller1│──┼─┤
│ └───────────┘ │
│ │ │ │
│ ┌───────────┐ │
└─┼─>│Controller2│──┼─┘
└───────────┘
└ ─ ─ ─ ─ ─ ─ ─ ─ ┘管理方式不同
Filter 由 Servlet 容器管理, 需要使用
DelegatingFilterProxy
代理类才能被 Spring 集成; Interceptor 直接由 Spring IoC 容器管理