Java使用ThreadLocal实现当前登录信息的存取功能
作者:旷世奇才李先生 时间:2023-06-06 12:00:34
一、使用ThreadLocal实现当前登录信息的存取
在项目中我们增加一个员工有一些信息是需要我们自己填入的,有一些信息不需要我们自己填写,例如:创建时间,创建人等,那么这些事件我们通常就是使用实体类然后set相关属性,但是我们可以使用MetaObjectHandler来将这些不要要我们自己穿的参数进行默认填充,但是创建人和更新人是获取的当前用户登录人。
我们都知道想要获取当前的登录人就需要使用HttpServletRequest来获取,但是我们字符串填充类没有这个,那么我们就可以使用ThreadLocal来实现当前登录信息的存取。
ThreadLocal的实现原理就是,一个线程里面有局部变量,我们可以利用局部变量来存取数据,当然我们必须保证是同一个线程这样才能准确的存储和获取数据,在我们一个请求流程下来我们都使用的一个线程,所以这里我们就可以使用ThreadLocal来进行信息的存取。
1,写一个工具类用于存取用户id
/**
* @Author: KSQC
* @Description: 基于ThreadLocal对登陆用户信息进行存储和读取
* @Date: 2023/2/16 22:11
*/
public class BaseContext {
private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();
public static void setCurrentId(Long id){
threadLocal.set(id);
}
public static Long getCurrentId(){
return threadLocal.get();
}
}
2、在用户登录的时候我们在过滤器中可以获取用户的id,这个时候我们将用户id放入ThreadLocal中。
//4、判断登录状态,如果已登录,则直接放行
if(request.getSession().getAttribute("employee") != null){
log.info("用户已登录,用户id为:{}",request.getSession().getAttribute("employee"));
Long empId = (Long) request.getSession().getAttribute("employee");
BaseContext.setCurrentId(empId);
filterChain.doFilter(request,response);
return;
}
然后在需要用到用户id的地方进行读取:
@Override
public void insertFill(MetaObject metaObject) {
log.info("公共字段自动填充[insert]...");
log.info(metaObject.toString());
metaObject.setValue("createTime", LocalDateTime.now());
metaObject.setValue("updateTime",LocalDateTime.now());
metaObject.setValue("createUser",BaseContext.getCurrentId());
metaObject.setValue("updateUser",BaseContext.getCurrentId());
}
在上面的方法写完成后,我们直接运行程序,然后新增和修改员工就会进入这些方法然后进行字段填充操作。
二、总结
这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
来源:https://blog.csdn.net/weixin_44096133/article/details/129073816
标签:threadlocal,当前登录信息,存取
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android进阶Hook拦截系统实例化View过程实现App换肤功能
2023-12-01 21:22:12
![](https://img.aspxhome.com/file/2023/8/138938_0s.png)
Android实现Activity界面切换添加动画特效的方法
2021-07-11 08:02:35
Java 关键字 速查表介绍
2022-07-03 22:04:48
使用OpenGL绘制Bezier曲线
2023-03-14 19:55:39
![](https://img.aspxhome.com/file/2023/4/112284_0s.jpg)
聊聊MultipartFile与File的一些事儿
2023-06-27 03:07:00
![](https://img.aspxhome.com/file/2023/2/100052_0s.png)
使用SpringMVC的@Validated注解验证的实现
2023-09-20 19:49:55
为什么说HashMap线程不安全
2022-08-05 22:01:23
c#中分割字符串的几种方法
2023-04-11 16:04:30
基于SpringMVC入门案例及讲解
2023-04-06 17:34:43
![](https://img.aspxhome.com/file/2023/6/75786_0s.jpg)
浅谈Spring Boot 整合ActiveMQ的过程
2022-03-22 05:20:27
SpringMVC 参数绑定之视图传参到控制器的实现代码
2021-12-29 11:54:17
![](https://img.aspxhome.com/file/2023/2/129222_0s.jpg)
Android仿QQ空间动态界面分享功能
2023-11-13 11:03:58
![](https://img.aspxhome.com/file/2023/9/138399_0s.gif)
Android实现左侧滑动菜单
2022-10-10 14:58:41
![](https://img.aspxhome.com/file/2023/9/138079_0s.jpg)
java递归菜单树转换成pojo对象
2022-08-12 04:04:40
Unity实现跑马灯抽奖效果
2022-10-09 04:09:54
![](https://img.aspxhome.com/file/2023/4/67054_0s.jpg)
Spring Batch轻量级批处理框架实战
2023-01-08 00:24:23
![](https://img.aspxhome.com/file/2023/0/89500_0s.png)
详解spring boot配置单点登录
2022-07-27 11:50:11
Java后台批量生产echarts图表并保存图片
2023-11-25 03:24:39
Java二维数组实战案例
2022-08-13 08:59:25
![](https://img.aspxhome.com/file/2023/6/63996_0s.png)
Android自定义ImageView实现自动放大缩小动画
2021-11-07 12:24:48