拦截器有关问题---preHandle执行了两次

拦截器

最近要写一个对于每个接口请求提前做下乱码检测,这个时候因为项目中的接口特别多,这个时候想到要写一个拦截器,在写拦截器的时候遇到了一些问题记录一下:
1.spring boot 2.0+后的版本因为拦截器的WebMvcConfigurerAdapter这个抽象类已经废弃,导致不适用,不起效果了
2.换成WebMvcConfigurer后,每次请求,在打印日志的时候发现preHandle总是在Controller处理之前执行一次和在Controller后又执行了一次。

自定义拦截器的实现

1.定义一个自定义拦截器实现HandlerInterceptorAdapter
在preHandle中进行相关处理
拦截器有关问题---preHandle执行了两次
2.将自定义的拦截器注册到配置中

拦截器有关问题---preHandle执行了两次

问题原因

在每个Controller中我都用Mono进行了封装然后因为Mono是异步的,对于有异步处理的Controller,拦截器的处理步骤是不同的。
拦截器有关问题---preHandle执行了两次拦截器有关问题---preHandle执行了两次
如果不要执行两次,需要特殊处理一下;做一个ThreadLocal,如果对当期请求已经处理过就不要再处理; 然后在afterCompletion里把threadLocal值清空;

上一篇:Maven系列二setting.xml 配置详解


下一篇:SpringBoot拦截器及源码分析