Java面试题更新 2026-08-05

请比较 Spring 框架中拦截器(Interceptor)与过滤器(Filter)在实现机制、使用场景和生命周期等方面的主要区别。

技术原理Java

考察说明

考查对 Spring MVC 中拦截器与 Servlet 过滤器概念、作用时机及适用场景的理解。

回答思路

  1. 【回答框架 1】过滤器是 Servlet 规范的一部分,在请求进入 Servlet 之前或响应离开之后执行,依赖于容器,通过 web.xml 或注解注册,可对静态资源和所有 Servlet 生效。
  2. 【回答框架 2】拦截器是 Spring MVC 的组件,基于 HandlerInterceptor 接口,在 HandlerMapping 定位到处理器后、处理器执行前(preHandle)、执行后(postHandle)及整个请求完成后(afterCompletion)回调,只对 Spring MVC 处理的请求有效。
  3. 【回答框架 3】过滤器能实现更通用的横切逻辑,如编码设置、跨域处理、敏感词过滤;拦截器更贴近业务逻辑,如登录校验、权限检查、日志记录。
  4. 【回答框架 4】从执行顺序看,过滤器先于拦截器执行,且拦截器可以访问 Handler 对象和 ModelAndView,而过滤器只能对请求和响应对象进行操作。
  5. 【关键点 1】过滤器基于 Servlet 规范,拦截器基于 Spring MVC。
  6. 【关键点 2】过滤器先于拦截器执行,且对静态资源也生效。
  7. 【关键点 3】拦截器可访问 Handler 和 ModelAndView,过滤器不能。
  8. 【关键点 4】过滤器适合通用处理,拦截器适合业务相关处理。
  9. 【易错点 1】混淆两者作用范围,认为拦截器也能拦截静态资源。
  10. 【易错点 2】忽略过滤器在容器级别、拦截器在 MVC 级别的执行顺序。