SpringBoot中的ThreadLocal保存请求用户信息的实例demo
更新时间:2024年05月30日 09:39:35 作者:奋--斗
线程局部变量,创建一个线程变量后,针对这个变量可以让每个线程拥有自己的变量副本,每个线程是访问的自己的副本,与其他线程的相互独立,本文介绍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中获取微信用户信息的方法
- SpringBoot+SpringCloud用户信息微服务传递实现解析
- Springboot+Shiro记录用户登录信息并获取当前登录用户信息的实现代码
- SpringBoot使用Redis的zset统计在线用户信息
- Springboot通过请求头获取当前用户信息方法详细示范
- SpringBoot登录、退出、获取用户信息的session处理方案
- springboot如何完美通过token获取用户信息
- springboot登录拦截器+ThreadLocal实现用户信息存储的实例代码
- SpringBoot通过参数注解自动获取当前用户信息的方法
- springboot获取当前用户信息的三种方式
相关文章
关于Java实体类Serializable序列化接口的作用和必要性解析
序列化是将对象状态转化为可保持或者传输的格式过程,与序列化相反的是反序列化,完成序列化和反序列化,可以存储或传输数据,一般情况下,在定义实体类时会使用Serializable,需要的朋友可以参考下2023-05-05IntelliJ IDEA 2022.1.1创建java项目的详细方法步骤
最近安装了IntelliJ IDEA 2022.1.1,发现新版本的窗口还有些变化的,所以下面这篇文章主要给大家介绍了关于IntelliJ IDEA 2022.1.1创建java项目的详细方法步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下2022-07-07StackTraceElement获取方法调用栈信息实例详解
这篇文章主要介绍了StackTraceElement获取方法调用栈信息实例详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下2018-02-02
最新评论