当前位置: 首页 > news >正文

自定义拦截器不生效问题记录

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

  

Configuration
public class OraDingdingConfigurer implements WebMvcConfigurer, Interceptor {/*** 拦截器参数校验** @param interceptorRegistry*/@Overridepublic void addInterceptors(InterceptorRegistry interceptorRegistry) {//注意拦截器的顺序interceptorRegistry.addInterceptor(new CharacterValidInterceptors());interceptorRegistry.addInterceptor(new HttpParamVerifyInterceptor());interceptorRegistry.addInterceptor(new HttpRequestStatisticsInterceptor());}@Overridepublic void configurePathMatch(PathMatchConfigurer pathMatchConfigurer) {}@Overridepublic void configureContentNegotiation(ContentNegotiationConfigurer contentNegotiationConfigurer) {}@Overridepublic void configureAsyncSupport(AsyncSupportConfigurer asyncSupportConfigurer) {}@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer defaultServletHandlerConfigurer) {}@Overridepublic void addFormatters(FormatterRegistry formatterRegistry) {}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry resourceHandlerRegistry) {}@Overridepublic void addCorsMappings(CorsRegistry corsRegistry) {}@Overridepublic void addViewControllers(ViewControllerRegistry viewControllerRegistry) {}@Overridepublic void configureViewResolvers(ViewResolverRegistry viewResolverRegistry) {}@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> list) {}@Overridepublic void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> list) {}@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> list) {}@Overridepublic 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);*/}}@Overridepublic void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> list) {}@Overridepublic void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> list) {//todo 添加全局异常,因为HandlerInterceptor不能显示异常 之前是写到了configureHandlerExceptionResolvers 里面,使用哪个会和全局异常DefaultGlobalExceptionHandler有先后顺序问题list.add(0,new DingdingHandleException());}@Overridepublic Validator getValidator() {return null;}@Overridepublic MessageCodesResolver getMessageCodesResolver() {return null;}@NotNull@Overridepublic Response intercept(@NotNull Chain chain) throws IOException {Request request = chain.request();return chain.proceed(request);}@Beanpublic DispatcherServlet dispatcherServlet(){return new OraDispatcherServlet();}@Beanpublic DruidStatLogger druidStatLogger(){return new DruidStatLogger();}@Beanpublic 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 

 

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

http://www.jsqmd.com/news/69138/

相关文章:

  • 102302122许志安作业4
  • Logo设计机构权威选择指南:2025年十大战略型设计服务商深度解析
  • 2025年最新垃圾分类/处理/分拣设备实力厂家TOP5深度解析
  • 纯前端也能用大模型?我的本地推理 + 云端推理混合方案经验
  • 2025 激光焊接机权威榜单出炉!10 大厂家硬核 PK,国产化技术领跑全球
  • 揭秘姜胖胖韩式烤肉连锁加盟:高知名度与好口碑背后的秘密
  • Q:RabbitMQ 安装教程(openEuler 22.03 LTS-SP3)
  • 大学生必备App全攻略:从学习到生活,这几款神器让你轻松拿捏校园时光
  • 你的故事如何打动梦校?留学中介 TOP8 文书能力排行榜
  • 大学生必备 APP 清单,错过血亏!
  • 留学必备APP全攻略:从学习到生活,这几款神器让你轻松适应海外生活
  • 在.NET中实现一库多租户(Single Database Multi-Tenancy)模式,主要通过共享数据库但隔离数据的方式实现。
  • 全流程跟踪!留学中介排行榜TOP10把控申请节奏
  • 【RocketMQ】安装配置 - 谷粒
  • 学习机大揭秘:哪个品牌才是孩子的最佳拍档?
  • 学习机大揭秘:哪个品牌才是孩子的最佳拍档?
  • 权威解析:十大留学机构深度评测与2025精英选择指南
  • 网卡混杂模式解析:从网络诊断到 Kubernetes 网络模型
  • VMware 等企业软件固件下载
  • 2025 中小学生 AI 学习机选购指南:松鼠 AI 登顶!这 4 款高性价比之选闭眼入
  • 市场变天了!2025 选学习机别只看大牌,这两个新趋势要抓住
  • Python reduce 改为 chain ,性能优化
  • 2025年PPH法兰球阀订制厂家权威推荐榜单:PPH阀门‌/PPH球阀‌/PPH法兰隔膜阀源头厂家精选
  • 2025年进口电动蒸汽截止阀制造企业权威推荐榜单:进口气动蒸汽球阀‌/进口蒸汽截止阀‌/进口自力式蒸汽调节阀源头厂家精选
  • 2025选购必看:武汉红砖厂家综合实力与口碑排行,排行前列的红砖赋能企业生产效率提升与成本优化
  • 2025 年 12 月炉温监控设备厂家权威推荐榜:波峰焊炉温/残氧量/氮气控制/真空测温仪,精准工艺与智能监控技术深度解析
  • 2025年市面上可靠的投影机出租公司哪家强,50000流明投影机/水幕投影机出租/激光投影机出租/投影机出租工厂排行榜
  • 可对话的赛博分身:用 Claude Code 分析 GitHub 日记
  • VMware NSX 身份防火墙 - 基于终端用户的安全策略
  • 公众号排版不用愁!酷宣 AI 保姆级攻略,新手也能秒变专业小编