为什么用ThreadLocal存储用户信息
在 RefreshTokenInterceptor 中使用 ThreadLocal(通过 UserHolder.saveUser(userDTO))的主要目的是在一次 HTTP 请求的整个处理过程中,方便地在各个组件中访问当前用户的信息,而无需显式地传递用户对象。
🧩 为什么使用 ThreadLocal 存储用户信息?
-
线程隔离,避免数据混乱
在 Web 应用中,每个 HTTP 请求通常由一个独立的线程处理。使用ThreadLocal可以为每个线程提供独立的变量副本,确保用户数据在不同请求之间不会互相干扰,从而避免数据混乱的问题。 -
简化参数传递,降低耦合度
将用户信息存储在ThreadLocal中后,业务层或控制器可以直接通过UserHolder.getUser()获取当前用户信息,无需在方法之间显式传递用户对象,简化了代码结构,降低了层与层之间的耦合度。 -
提升代码可读性和维护性
通过ThreadLocal,可以在任何需要的地方方便地获取当前用户信息,提高了代码的可读性和可维护性。
⚠️ 注意事项
-
及时清理,防止内存泄漏
由于ThreadLocal绑定的数据与线程生命周期一致,如果不及时清理,可能会导致内存泄漏。因此,在请求处理完成后,应调用UserHolder.removeUser()方法清除存储的用户信息 -
避免跨线程访问
ThreadLocal中存储的数据仅对当前线程可见,不能在多个线程之间共享。如果需要在多个线程之间共享数据,应考虑使用其他线程安全的机制
✅ 总结
在 RefreshTokenInterceptor 中使用 ThreadLocal 存储用户信息,可以实现以下目标
- 确保每个请求的用户信息独立,避免数据混乱
- 化代码结构,降低层与层之间的耦合度
- 提高代码的可读性和可维护性

浙公网安备 33010602011771号