news 2026/9/4 14:10:52

springboot拦截器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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.拦截器特点

  1. 可以在 Controller 执行前、执行后以及请求完成后分别进行处理。
  2. 主要作用于 Spring MVC 的 Handler 执行链,而不是 Servlet 容器中的所有请求。
  3. 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。
ActionActionContextValueStack属于 Struts2 体系。Spring MVC 的HandlerInterceptor对应的是 Handler,可以获取当前 Handler 等 Spring MVC 上下文信息。

3. “Filter 基于函数回调,而 Interceptor 基于反射”——不严谨。
Filter 与 HandlerInterceptor 本身都是基于接口回调工作的。Spring MVC 调用 Controller 方法的过程中可能涉及反射,但不能因此认为 HandlerInterceptor 本身是基于反射实现的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 14:03:32

Mastra 工作流错误处理与重试:3 步把失败步骤找出来、控制住

Mastra 工作流错误处理与重试:3 步把失败步骤找出来、控制住 【免费下载链接】mastra Mastra is the modern TypeScript framework for AI-powered applications and agents. 项目地址: https://gitcode.com/GitHub_Trending/ma/mastra 工作流跑到一半挂了&a…

作者头像 李华
网站建设 2026/9/4 13:58:53

niri 滚动平铺合成器性能调优:3 个调试快捷键定位卡顿源头

niri 滚动平铺合成器性能调优:3 个调试快捷键定位卡顿源头 【免费下载链接】niri A scrollable-tiling Wayland compositor. 项目地址: https://gitcode.com/GitHub_Trending/ni/niri niri 是一款滚动平铺(scrollable-tiling)Wayland …

作者头像 李华
网站建设 2026/9/4 13:56:00

常用的文档编辑技巧

在此,对常用的一些文件编辑中的方法进行总结,以后方便查询(*^▽^*)Word篇1、图片嵌入2、插入表名-图名(表在表上,图在图下)3、表头分页显示4、插入表连续增加行数先增加一行,然后按F4可以连续插入行5、设置…

作者头像 李华
网站建设 2026/9/4 13:54:35

NOI OJ 1.6 10:大整数加法 C语言

描述求两个不超过200位的非负整数的和。输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。有一说一我本人是…

作者头像 李华