SpringBoot中的ThreadLocal保存请求用户信息的实例demo
作者:奋--斗
线程局部变量,创建一个线程变量后,针对这个变量可以让每个线程拥有自己的变量副本,每个线程是访问的自己的副本,与其他线程的相互独立,本文介绍SpringBoot中的ThreadLocal保存请求用户信息,需要的朋友可以参考下
一、ThreadLocal概述
线程局部变量,创建一个线程变量后,针对这个变量可以让每个线程拥有自己的变量副本,每个线程是访问的自己的副本,与其他线程的相互独立。
二、具体代码demo实现
(1)创建user实例对象
@Data
public class UserDTO {
private Long userId;
private String UserName;
}(2)创建UserThreadLocal对象
public class UserThreadLocal {
private UserThreadLocal(){};
private static final ThreadLocal<UserDTO> USER_DTO_THREAD_LOCAL = new ThreadLocal<>();
/**
* 清除信息
*/
public static void clear(){
USER_DTO_THREAD_LOCAL.remove();
}
/**
* 保存用户信息
* @param userDTO
*/
public static void set(UserDTO userDTO){
USER_DTO_THREAD_LOCAL.set(userDTO);
}
public static UserDTO getCurrentUser(){
return USER_DTO_THREAD_LOCAL.get();
}
}(3)创建用户拦截器
@Component
public class UserInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//此处实际应该根据header的token解析出用户本处为了简单,直接虚构一个用户
UserDTO userDTo = new UserDTO();
userDTo.setUserId(10001L);
userDTo.setUserName("张三");
UserThreadLocal.set(userDTo);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
UserThreadLocal.clear();
}
}(4) 注册用户拦截器
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserInterceptor());
}
}(5)编写测试接口
@RequestMapping("test")
@RestController
public class TestController {
@GetMapping("get")
public UserDTO getUser(){
UserDTO currentUser = UserThreadLocal.getCurrentUser();
System.out.println(currentUser);
return currentUser;
}
}(6)效果展示

到此这篇关于SpringBoot之ThreadLocal保存请求用户信息的文章就介绍到这了,更多相关SpringBoot ThreadLocal保存请求用户信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- springboot在filter中如何用threadlocal存放用户身份信息
- springboot登录拦截器+ThreadLocal实现用户信息存储的实例代码
- SpringBoot ThreadLocal 简单介绍及使用详解
- SpringBoot+ThreadLocal+AbstractRoutingDataSource实现动态切换数据源
- Springboot公共字段填充及ThreadLocal模块改进方案
- SpringBoot ThreadLocal实现公共字段自动填充案例讲解
- SpringBoot通过ThreadLocal实现登录拦截详解流程
- springboot 使用ThreadLocal的实例代码
- SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结
