下午用两小时排查出一个用拦截器往ThreadLocal里放数据出现的问题。大家可以了解下。
问题描述如下:新颜系统有部分请求需要经过拦截器往ThreadLocal里设置user信息,不需要user请求不经过拦截器。但是发现在没有经过拦截器的请求也能获取到user信息。
后经猜想和排查出原因为:在拦截请求完成后返回到前台前,没有remove掉ThreadLocal中的信息。一般的web服务器的请求连接都是用的线程池实现,对一个不需要经过拦截器的请求,如果刚好是某个被之前用过的空闲线程来完成,就有可能出现问题描述中的情况。