当前位置: 首页 > 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.gsyq.cn/news/79696.html

相关文章:

  • 退役选手玩儿原神 (1)
  • 电池的荷电状态(SOC)估计
  • nginx保姆及教学
  • 2025 激光焊接机权威榜单出炉!10 大厂家硬核 PK,国产化技术领跑全球
  • Xcode16
  • 大学生必备 APP 清单,错过血亏!
  • 留学必备APP全攻略:从学习到生活,这几款神器让你轻松适应海外生活
  • 在.NET中实现一库多租户(Single Database Multi-Tenancy)模式,主要通过共享数据库但隔离数据的方式实现。
  • 学习机大揭秘:哪个品牌才是孩子的最佳拍档?
  • 权威解析:十大留学机构深度评测与2025精英选择指南
  • VMware 等企业软件固件下载
  • 市场变天了!2025 选学习机别只看大牌,这两个新趋势要抓住
  • 可对话的赛博分身:用 Claude Code 分析 GitHub 日记
  • 2025年进口电动蒸汽截止阀制造企业权威推荐榜单:进口气动蒸汽球阀‌/进口蒸汽截止阀‌/进口自力式蒸汽调节阀源头厂家精选
  • 重练算法(代码随想录版) day35 - 动态规划part3
  • 2025 天线厂家 TOP10 推荐:科普选型指南,靠谱品牌助力通信升级
  • 2025年四川小程序开发方案权威推荐榜单:小程序平台/小程序定制/商城小程序方案服务商精选
  • 商家是否要在小红书做推广❓1分钟让你想明白
  • 2025年国内光伏线缆厂家最新权威推荐排行榜
  • TOP10留学机构干货:服务细节聚焦文本优势双保障
  • 交通设施行业公路护栏优质品牌推荐指南多场景适配
  • 留学机构排行榜TOP10:好文书如何改写你的录取结果
  • 这是新建的随笔,第二篇
  • 2025博士申请十大机构实测:学术引航,申请不迷路
  • 2025年乳化机设备订制厂家权威推荐榜单:高剪切混合乳化机‌/真空制膏机‌/实验室乳化机源头厂家精选
  • 文书深度打磨!留学机构排名TOP10适配名校偏好
  • 2025年青岛初三辅导班机构权威推荐榜单:高一辅导班‌/高二辅导班‌/高三辅导班源头机构精选
  • 多重比较校正
  • 小动物影像分析资源
  • FY3D/MERSI 哈默投影 NDVI/EVI - EPSG:4326 投影转换 - Littlefish