threadlocal获取登录用户
时间: 2023-08-18 17:14:43 浏览: 104
ThreadLocal是Java中的一个类,可以在多线程环境下为每个线程提供独立的变量副本。通过使用ThreadLocal,我们可以在拦截器中解析token获取到用户的信息,并将用户信息存入ThreadLocal对象中,以便在整个请求的生命周期内随时获取到当前线程的用户信息。
具体实现步骤如下:
1. 首先,编写一个ThreadLocal工具类,例如UserUtils,该类包含一个私有的ThreadLocal对象,用于存储用户信息。该类提供了set、get和remove方法,分别用于将用户信息放入ThreadLocal、获取当前线程中的用户信息和删除当前线程中的用户信息。
2. 在拦截器中,解析token获取到用户的信息,并调用UserUtils的set方法将用户信息放入ThreadLocal中。
3. 在需要获取用户信息的地方,调用UserUtils的get方法即可获取当前线程中的用户信息。
4. 在请求结束后,需要调用UserUtils的remove方法删除当前线程中的用户信息,以防止内存泄漏。
示例代码如下:
```java
// UserUtils.java
public class UserUtils {
private static final ThreadLocal<User> LOCAL = new ThreadLocal<>();
private UserUtils() {}
public static void set(User user) {
LOCAL.set(user);
}
public static User get() {
return LOCAL.get();
}
public static void remove() {
LOCAL.remove();
}
}
// 拦截器中的代码
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 解析token获取用户信息
User user = parseToken(request);
// 将用户信息放入ThreadLocal
UserUtils.set(user);
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 请求结束后,删除ThreadLocal中的用户信息
UserUtils.remove();
}
}
// 在需要获取用户信息的地方
User user = UserUtils.get();
```
通过以上步骤,我们可以在拦截器中解析token获取到用户的信息,并将用户信息存入ThreadLocal对象中。在整个请求的生命周期内,我们可以随时通过UserUtils.get()方法获取到当前线程中的用户信息。
#### 引用[.reference_title]
- *1* *2* [ThreadLocal获取用户信息](https://blog.csdn.net/qq_38737586/article/details/118661699)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [ThreadLocal实现登录(保存用户登录信息)](https://blog.csdn.net/qq_56851614/article/details/125464270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文