ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

springboot拦截器

2026/9/4 14:10:54 拓冰建站 浏览量
springboot拦截器 文章目录1.什么是拦截器2.拦截器特点3.拦截器作用4.springmvc中开发拦截器步骤5.springboot中使用拦截器6.几个常见但不准确的说法1.什么是拦截器拦截器Interceptor类似于Servlet中的过滤器主要用于拦截客户请求并做出相应的处理。与过滤器有如下区别1.Filter 通常初始化一次但其 doFilter() 会针对每个匹配请求执行HandlerInterceptor 的各个回调方法同样会随着匹配请求重复执行因此不存在“Filter 只能调用一次、Interceptor 可以调用多次”的区别。2.Filter 工作在 Servlet 层作用范围通常更广HandlerInterceptor 工作在 Spring MVC 的 Handler 执行链中主要针对 Spring MVC 能够映射到 Handler 的请求。3.Filter 主要操作 Request、Response 等 Servlet 对象HandlerInterceptor 更接近 Controller可以获取当前执行的 Handler 等 Spring MVC 上下文信息。4.Filter 属于 Servlet 规范由 Servlet 容器管理HandlerInterceptor 属于 Spring MVC通常由 Spring 容器管理。5.Filter 和 HandlerInterceptor 本身都是基于接口回调工作的。“Filter 基于回调而 Interceptor 基于反射”这种常见说法并不准确反射更多涉及 Spring MVC 对 Controller 方法的调用过程。6.过滤器不能获取IOC容器中的各个bean而拦截器可以这点很重要在拦截器里注入一个service可以调用业务逻辑。第 6 点并不准确特意保留并标记删除线。Filter 如果交由 Spring 容器管理同样可以注入并使用 Spring Bean因此这不是 Filter 与 Interceptor 的本质区别。2.拦截器特点可以在 Controller 执行前、执行后以及请求完成后分别进行处理。主要作用于 Spring MVC 的 Handler 执行链而不是 Servlet 容器中的所有请求。preHandle() 返回 false 时可以中断后续 Handler 的执行。3.拦截器作用将多个 Controller 中共有的请求处理逻辑放入拦截器可以减少重复代码。常见场景包括日志记录、请求耗时统计、登录状态检查、公共参数处理等。4.springmvc中开发拦截器步骤1.实现 HandlerInterceptor 接口或者实现 WebRequestInterceptor 接口。2.在传统 Spring MVC 项目中可通过 XML 配置注册拦截器。5.springboot中使用拦截器Spring Boot 中拦截器的实现方式与 Spring MVC 相同主要区别是通常使用 Java 配置替代传统 XML 配置。自定义拦截器:然后实现WebMvcConfigurer配置器。早期 Spring MVC 项目经常继承 WebMvcConfigurerAdapter但该类在 Spring Framework 5.0 后已被废弃。现在通常有以下两种写法1.直接实现org.springframework.web.servlet.config.annotation.WebMvcConfigurer接口。推荐2.继承 WebMvcConfigurationSupport。这种方式相当于对 Spring MVC 配置进行更深度的接管可能影响 Spring Boot 原有的 MVC 自动配置。因此普通项目更推荐实现 WebMvcConfigurer只有确实需要全面自定义 MVC 配置时才考虑继承 WebMvcConfigurationSupport。6.几个常见但不准确的说法网上关于 Filter 与 Interceptor 的对比存在一些流传较广的旧说法这里简单纠正1. “Filter 只能调用一次而 Interceptor 可以调用多次”——不准确。Filter 的init()通常只执行一次但真正处理请求的doFilter()会针对每个匹配请求执行Interceptor 的回调方法同样会随着请求重复执行。2. “Interceptor 可以访问 ActionContext、值栈”——不适用于 Spring MVC。Action、ActionContext、ValueStack属于 Struts2 体系。Spring MVC 的HandlerInterceptor对应的是 Handler可以获取当前 Handler 等 Spring MVC 上下文信息。3. “Filter 基于函数回调而 Interceptor 基于反射”——不严谨。Filter 与 HandlerInterceptor 本身都是基于接口回调工作的。Spring MVC 调用 Controller 方法的过程中可能涉及反射但不能因此认为 HandlerInterceptor 本身是基于反射实现的。