每日小结

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容器管理