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

如何让多个Spring HandlerInterceptor按照指定顺序执行

问题根因

通过WebMvcConfigurer的addInterceptors()方法注册拦截器时,拦截器类上标注的@Order注解不会被Spring读取生效,只有注册时通过InterceptorRegistration的order()方法显式指定的优先级才会生效:

  • order值越小,拦截器优先级越高,preHandle方法越先执行
  • 未显式指定order的拦截器,默认优先级为0

解决方案

修改业务项目的拦截器注册逻辑,显式给自定义拦截器设置更低的优先级(更大的order值),即可保证它在库拦截器之后执行:

@SpringBootApplication
public class ActualProjectConfig implements WebMvcConfigurer {

    @Autowired
    private ActualProjectInterceptor actualProjectInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(actualProjectInterceptor)
                // 显式设置为最低优先级,保证晚于库拦截器执行
                .order(Ordered.LOWEST_PRECEDENCE);
    }
}

如果修改后还是不生效,说明库的拦截器注册时也设置了低优先级,你只需要调整自定义拦截器的order值,保证它比库拦截器的order值大即可,比如库拦截器order为10,你设置为11即可。

额外注意项

你依赖的库配置类上加了@EnableWebMvc注解,该注解会覆盖Spring Boot的MVC自动配置,如果后续遇到静态资源无法访问、内置消息转换器失效等问题,优先排查该注解的影响,如果可以修改库代码,建议去掉库配置类上的@EnableWebMvc,如果无法修改库代码,在业务项目中手动补全需要的MVC配置即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:06:04