下午用两小时排查出一个用拦截器往ThreadLocal里放数据出现的问题。大家可以了解下。
问题描述如下:新颜系统有部分请求需要经过拦截器往ThreadLocal里设置user信息,不需要user请求不经过拦截器。但是发现在没有经过拦截器的请求也能获取到user信息。
后经猜想和排查出原因为:在拦截请求完成后返回到前台前,没有remove掉ThreadLocal中的信息。一般的web服务器的请求连接都是用的线程池实现,对一个不需要经过拦截器的请求,如果刚好是某个被之前用过的空闲线程来完成,就有可能出现问题描述中的情况。
本文详细描述了在新颜系统中遇到的一个问题:未经拦截器的请求也能获取到ThreadLocal中的user信息。通过分析和排查,发现原因是拦截器请求结束后未正确移除ThreadLocal中的数据。对于使用线程池处理请求的场景,这个问题可能导致数据泄露。解决方法是在拦截器完成后手动移除ThreadLocal中的信息。
10万+

被折叠的 条评论
为什么被折叠?



