拦截器
最近要写一个对于每个接口请求提前做下乱码检测,这个时候因为项目中的接口特别多,这个时候想到要写一个拦截器,在写拦截器的时候遇到了一些问题记录一下:
1.spring boot 2.0+后的版本因为拦截器的WebMvcConfigurerAdapter这个抽象类已经废弃,导致不适用,不起效果了
2.换成WebMvcConfigurer后,每次请求,在打印日志的时候发现preHandle总是在Controller处理之前执行一次和在Controller后又执行了一次。
自定义拦截器的实现
1.定义一个自定义拦截器实现HandlerInterceptorAdapter
在preHandle中进行相关处理
2.将自定义的拦截器注册到配置中
问题原因
在每个Controller中我都用Mono进行了封装然后因为Mono是异步的,对于有异步处理的Controller,拦截器的处理步骤是不同的。
如果不要执行两次,需要特殊处理一下;做一个ThreadLocal,如果对当期请求已经处理过就不要再处理; 然后在afterCompletion里把threadLocal值清空;