Java面试题更新 2026-08-03

请说明 Spring MVC 中拦截链(HandlerInterceptor 与 InterceptorRegistry)的实现机制,包括其执行顺序、注册方式及与过滤器(Filter)的差异。

考察说明

考察对 Spring MVC 拦截器链生命周期和配置机制的理解。

回答思路

  1. 【回答框架 1】Spring MVC 拦截链由 HandlerInterceptor 组成,通过 InterceptorRegistry 注册到 HandlerMapping,按注册顺序形成链。每个拦截器包含 preHandle、postHandle、afterCompletion 三个回调方法。
  2. 【回答框架 2】执行顺序:preHandle 按注册顺序依次执行,若返回 false 则中断后续拦截器及处理器执行;postHandle 按逆序执行;afterCompletion 在请求完成后按逆序执行(无论是否异常)。
  3. 【回答框架 3】注册方式:在 WebMvcConfigurer 中通过 addInterceptors 方法添加拦截器,可设置 includePathPatterns 和 excludePathPatterns 指定拦截路径。
  4. 【回答框架 4】与 Filter 的区别:Filter 属于 Servlet 规范,在 DispatcherServlet 之前执行,拦截粒度是 URL;拦截器属于 Spring MVC,在 HandlerMapping 之后,可访问处理器方法参数和返回值。
  5. 【关键点 1】preHandle 返回 false 时中断链,但已执行拦截器的 afterCompletion 仍会被调用。
  6. 【关键点 2】postHandle 和 afterCompletion 的执行顺序与注册顺序相反。
  7. 【关键点 3】拦截器可配置路径,支持 Ant 风格模式。
  8. 【关键点 4】Filter 先于拦截器执行,且不依赖 Spring 容器。
  9. 【易错点 1】混淆 Filter 和拦截器的执行时机。
  10. 【易错点 2】误认为 preHandle 返回 false 后不会执行任何 afterCompletion。
  11. 【易错点 3】忽略路径配置导致拦截范围与预期不符。