Skip to content
对比维度Filter (过滤器)Interceptor (拦截器)
本质层面基于 Java Servlet 规范,由 Servlet 容器(如 Tomcat)管理基于 Spring MVC 框架,由 Spring 容器管理
触发时机DispatcherServlet 之前之后DispatcherServlet 内部,Controller 方法调用前后
依赖关系与 Spring 框架无直接依赖,是 J2EE 标准强依赖于 Spring MVC 框架
能力范围处理所有 HTTP 请求(包括静态资源、其他 Servlet)只能处理经过 DispatcherServlet 的请求
上下文感知无法直接感知将要执行的 Controller 方法和 Spring 上下文获取到即将执行的 HandlerMethodModelAndView 等 Spring MVC 核心对象
异常处理能捕获到 Servlet 容器层面的底层异常只能处理 Spring MVC 流程内的异常,有 @ControllerAdvice 更专业的处理机制
一句话总结应用的“门卫”,负责技术性、全局性的通用任务。业务的“切面”,负责业务性、精细化的通用任务。
最佳应用场景1. 全局编码设置 (CharacterEncodingFilter)
2. 跨域CORS处理 (CorsFilter)
3. 安全认证/授权 (如 Spring Security 的 Filter Chain)
4. 全局日志记录 (记录所有进出的 HTTP 流量)
5. 请求数据压缩 (GZIP Filter)
6. 注入全链路追踪ID (TraceID)
1. 业务层面的权限校验 (检查用户是否有权限调用某个 Controller 方法)
2. 业务审计日志 (记录“谁在什么时间做了什么具体操作”)
3. 防止重复提交 (通过 Token 或 Session 检查)
4. 向视图模型添加通用数据 (如在每个页面底部显示备案号)
5. 精细化的性能监控 (记录特定 Controller 方法的执行耗时)
  • 用 Filter 完成那些与你具体业务逻辑无关,但对整个 Web 应用至关重要的技术基础工作。
  • 用 Interceptor 完成那些需要深入了解你的业务上下文(具体是哪个 Controller、哪个方法),并为多个业务场景提供统一横切关注点的业务增强工作。

Released under the MIT License.