threadLocal问题

来源:5-3 线程封闭

zhusx

2018-08-29

为什么要使用过滤器add和拦截器remove,用其中的一个就可以实现把

写回答

1回答

Jimin

2018-08-29

你好,首先如果项目里只有一个filter和一个interceptor,或者只有其中一种时,用其中一个就可以实现,这是没问题的。

接下来,说一下这样做的目的。这样做,主要是考虑在项目中有多个filter和一个interceptor时,比如项目里同时有登录校验的filter、权限校验的filter,然后有一个interceptor做一些通用的记录(比如接口耗时)。这时,在登录校验的filter里把登录校验的信息写入threadLocal,然后需要在接口该执行的都执行完再从threadlocal中移除登录信息。在多个filter时,直接使用一个就很可能出现后面的filter还要使用,但是还没使用时就已经移除的情况。这时放到interceptor里保证最后阶段移除就明显更不容易出错了。

3
2
zxhi
一直不明白为啥要两个,现在有点懂了。但是老师这样的话,是不是要放在第一个过滤器里面赋值,最后一个拦截器删除呢?如果有多个拦截器是不是也要找哪个是最后执行的呀?
2018-12-08
共2条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程