惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
Martin Fowler
Martin Fowler
P
Palo Alto Networks Blog
MongoDB | Blog
MongoDB | Blog
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
博客园_首页
量子位
小众软件
小众软件
F
Full Disclosure
Vercel News
Vercel News
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
博客园 - 聂微东
V
V2EX
Blog — PlanetScale
Blog — PlanetScale
罗磊的独立博客
WordPress大学
WordPress大学
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence
L
Lohrmann on Cybersecurity
H
Hacker News: Front Page
Spread Privacy
Spread Privacy
AI
AI
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CERT Recently Published Vulnerability Notes
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Recorded Future
Recorded Future
L
LINUX DO - 热门话题
Microsoft Azure Blog
Microsoft Azure Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Latest news
Latest news
W
WeLiveSecurity
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 司徒正美
博客园 - 叶小钗
T
Threat Research - Cisco Blogs
P
Privacy International News Feed
O
OpenAI News
Help Net Security
Help Net Security
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享
博客园 - Franky

博客园 - Doyourself!

rocketmq 启动后 在mq console界面的consumer的Quantity数量显示为0 问题记录 python 切换版本后 提示 无法在python 3.11(.venv)(D:/my_rag_bot/.venv/Scripts/python.exe)设置 python sdk,该sdk似乎无效 记录一次日志告警随着nacos文件动态刷新而失效的问题 多个WebMvcConfigurer配置Jackson2ObjectMapperBuilder不生效问题记录 记录一次nginx能通但是请求一直不了的问题 idea远程连接并本地打包到远程服务器 记一次生产环境内存溢出记录 凤凰架构总结 sentinel接入记录 JVM虚拟机总结 记录一次首页优化的经历 使用sharding-jdbc做分库分表记录 使用druid自定义拦截器 记录一次 maven 子模块相互依赖导致的父模块无法动态升级的问题 'parent.relativePath' points at wrong local POM 雪花算法snowflakeIdWorker使用记录 全局调用链路traceId网关到业务层、feign调用统一问题记录 Spring Cloud 的ribbon的饥饿加载机制 打印mq异常消息记录 根据druid将慢sql通过钉钉的方式进行告警功能记录
自定义拦截器不生效问题记录
Doyourself! · 2025-12-09 · via 博客园 - Doyourself!

      新项目里面我把之前的告警添加了进来,添加后发现有个问题:我新增的拦截器一直不生效:我的代码如下

Configuration
public class OraDingdingConfigurer implements WebMvcConfigurer, Interceptor {

    /**
     * 拦截器参数校验
     *
     * @param interceptorRegistry
     */
    @Override
    public void addInterceptors(InterceptorRegistry interceptorRegistry) {
        //注意拦截器的顺序
        interceptorRegistry.addInterceptor(new CharacterValidInterceptors());
        interceptorRegistry.addInterceptor(new HttpParamVerifyInterceptor());
        interceptorRegistry.addInterceptor(new HttpRequestStatisticsInterceptor());
    }

    @Override
    public void configurePathMatch(PathMatchConfigurer pathMatchConfigurer) {

    }

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer contentNegotiationConfigurer) {

    }

    @Override
    public void configureAsyncSupport(AsyncSupportConfigurer asyncSupportConfigurer) {

    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer defaultServletHandlerConfigurer) {

    }

    @Override
    public void addFormatters(FormatterRegistry formatterRegistry) {

    }


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry resourceHandlerRegistry) {

    }

    @Override
    public void addCorsMappings(CorsRegistry corsRegistry) {

    }

    @Override
    public void addViewControllers(ViewControllerRegistry viewControllerRegistry) {

    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry viewResolverRegistry) {

    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> list) {

    }

    @Override
    public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> list) {

    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> list) {

    }

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> list) {
        //新版本中的
        Optional<HttpMessageConverter<?>> optional = list.stream()
                .filter(o -> o instanceof MappingJackson2HttpMessageConverter)
                .findFirst();
        if (optional.isPresent()) {
            MappingJackson2HttpMessageConverter converter =
                    (MappingJackson2HttpMessageConverter) optional.get();
            /*注意不要使用JsonInclude.Include.NON_NULL,会影响端上取data的问题*/
           /* ObjectMapper mapper = converter.getObjectMapper();
            mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);*/

        }
    }

    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> list) {
    }

    @Override
    public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> list) {
        //todo 添加全局异常,因为HandlerInterceptor不能显示异常 之前是写到了configureHandlerExceptionResolvers 里面,使用哪个会和全局异常DefaultGlobalExceptionHandler有先后顺序问题
       list.add(0,new DingdingHandleException());
    }

    @Override
    public Validator getValidator() {
        return null;
    }

    @Override
    public MessageCodesResolver getMessageCodesResolver() {
        return null;
    }

    @NotNull
    @Override
    public Response intercept(@NotNull Chain chain) throws IOException {
        Request request = chain.request();
        return chain.proceed(request);
    }

    @Bean
    public DispatcherServlet dispatcherServlet(){
        return new OraDispatcherServlet();
    }

    @Bean
    public DruidStatLogger druidStatLogger(){
        return new DruidStatLogger();
    }

    @Bean
    public OptionalAlarmUriUtils optionalAlarmUriUtils(){
        return new OptionalAlarmUriUtils();
    }

     按说我再本地请求一个方法时候,会进入addInterceptors的方法里面,但是自己测试发现怎么都进入不进去,问了ai,定位到可能是有其他模块使用了@EnableWebMvc导致的,或者包扫描没有到目录里面,但是都测试了下也都是正常配置的,初始化时候也被spring到bean里面了,最后看了半天,发现项目里面有一个类,是

@Configuration
public class WebConfig extends WebMvcConfigurationSupport ,总算找到了这个问题。引用ai的话:
(Spring Boot 官方文档明确说明):
一旦你继承了 WebMvcConfigurationSupport,就等于手动接管了 Spring MVC 的全部配置,Spring Boot 的自动配置 WebMvcAutoConfiguration 会被完全禁用。

这意味着:

所有通过 @Configuration + implements WebMvcConfigurer 声明的配置类(比如你的 OraDingdingConfigurer)
它们的 addInterceptors()、addResourceHandlers() 等方法将永远不会被调用!
因为 Spring Boot 认为:“你已经自己管 MVC 了,我不再插手。”

  只需要把这个类修改一下:

public class WebConfig implements WebMvcConfigurer 
  
这样就能让两个拦截器都能使用了,重新断点测试,可以了