Skip to content

Servlet 的 Filter 和 Spring MVC 的 Interceptor 都能在请求前后插一脚,依赖不一样,执行顺序也不一样。

  • Filter:配在 web.xml 或 FilterRegistration,挂在 Servlet 容器上。没有 Spring 也能用。
  • Interceptor:配在 Spring MVC(实现 HandlerInterceptor),跟着 DispatcherServlet 走。

请求进来时,Filter 更靠外,先于 Interceptor。一个典型顺序是:Filter 进入 → Interceptor preHandle → Controller → Interceptor postHandle / afterCompletion → Filter 退出。

实现机制也常被拿来对比:Filter 更像在 Servlet API 上的回调链;Interceptor 是 Spring 里对处理器的包装,能拿到 Handler、ModelAndView。Interceptor 能做的事通常覆盖 Filter,而且能碰到控制器这一层的对象。

怎么选:

  • 和框架无关的事——字符编码、整站跨域、很粗的登录有无——Filter 够用。
  • 要按 Controller、要动 Model、要和 Spring Bean 协作——用 Interceptor。

两者可以同时在。Filter 解决容器级,Interceptor 解决应用级,不必互相替代。

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win