Spring MVC 拦截器详解:从原理到实践
拦截器(Interceptor)是 Spring MVC 提供的核心功能之一,用于在请求处理的不同阶段进行拦截并执行自定义逻辑(如权限校验、日志记录、性能监控等)。它与 Servlet 过滤器(Filter)类似,但更贴合 Spring MVC 的生命周期,使用更灵活。从 “拦截器与过滤器的区别→拦截器的使用→执行原理→实战场景” 全面解析 Spring MVC 拦截器。
拦截器与过滤器的核心区别
虽然拦截器和过滤器都能实现请求拦截,但两者在技术归属、执行时机、拦截范围等方面有本质区别:
| 特性 | 拦截器(Interceptor) | 过滤器(Filter) |
|---|---|---|
| 技术归属 | Spring MVC 框架提供 | Servlet 规范提供(Java EE 原生) |
| 执行时机 | 在 DispatcherServlet 内部执行 | 在 DispatcherServlet 之前执行 |
| 拦截范围 | 仅拦截 Spring MVC 管理的请求(如 @RequestMapping 标注的方法) |
拦截所有进入 Web 容器的请求(包括静态资源、JSP 等) |
| 底层实现 | 基于 Java 反射机制 | 基于函数回调 |
| 生命周期管理 | 由 Spring 容器管理,可注入 Spring Bean | 由 Web 容器管理,无法直接使用 Spring 资源 |
| 方法粒度 | 可精确到 Controller 方法级别 | 仅能到 URL 级别 |
拦截器的核心接口与方法
Spring MVC 拦截器通过 HandlerInterceptor 接口定义核心行为,包含三个关键方法,分别对应请求处理的不同阶段: