You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MappedInterceptor与WebMvcConfigurer addInterceptors:Spring Boot添加HandlerInterceptor的正确方式

Spring Boot 拦截器两种配置方式说明

两种实现的存在原因与差异

  • 实现WebMvcConfigurer重写addInterceptors方法
    这是Spring MVC 3.1版本之后官方推出的面向业务开发者的上层配置API,本质是对底层注册逻辑的封装,把所有拦截器的配置集中在同一个方法里,可读性和可维护性更高,配置路径匹配、排除规则、执行优先级的API也更友好,专门给业务系统自定义业务拦截器(比如鉴权、请求日志、参数统一校验这类场景)使用。
    注意如果你的拦截器需要依赖Spring容器中的其他Bean,不要直接new实例,要先把拦截器注册成Spring Bean,再注入到配置类中传入InterceptorRegistry,示例:
    @Configuration
    public class AppConfig implements WebMvcConfigurer {
      // 先注入已经交给Spring管理的拦截器实例
      @Autowired
      private MyInterceptorOne myInterceptorOne;
    
      @Override
      public void addInterceptors(InterceptorRegistry registry) {
       registry.addInterceptor(myInterceptorOne).addPathPatterns("/api/data/**");
      }
    }
    
  • 直接注册MappedInterceptor类型的Bean
    MappedInterceptor是Spring MVC的底层原生类,作用就是把拦截器实例和对应的路径匹配规则绑定在一起。你用addInterceptors方法添加的所有拦截器,Spring底层最终都会转换成MappedInterceptor实例再注册到容器中。
    这种方式主要面向框架/公共组件开发场景:比如你开发Spring Boot Starter的时候,直接注册MappedInterceptor Bean不需要依赖业务方是否自定义了WebMvcConfigurer配置,会被Spring MVC自动识别加载,不会和业务方的自定义拦截器配置冲突。另外传统Spring XML配置迁移到注解配置时,原来<mvc:interceptor>标签的逻辑也对应直接注册MappedInterceptor Bean。

Spring Boot 现代规范用法

正常业务开发优先选*实现WebMvcConfigurer重写addInterceptors*的方式,这也是Spring Boot官方文档推荐的最佳实践,配置统一,维护成本更低。
只有两种场景适合用注册MappedInterceptor Bean的方式:

  • 开发Spring Boot Starter等公共组件,需要实现拦截器自动注入,不需要业务方手动配置
  • 需要对拦截器的加载、执行逻辑做底层的自定义控制

内容的提问来源于stack exchange,提问作者Aun Kott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:15:02