springboot登录拦截器+ThreadLocal实现用户信息存储的实例代码
ThreadLocal
- 是什么
从名字我们就可以看到ThreadLocal 叫做本地线程变量,意思是说,ThreadLocal 中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal 为变量在每个线程中创建了一个副本,这样每个线程都可以访问自己内部的副本变量。
1、在进行对象跨层传递的时候,使用ThreadLocal可以避免多次传递,打破层次间的约束。
2、线程间数据隔离
3、进行事务操作,用于存储线程事务信息。
4、数据库连接,Session会话管理。
- 内部实现
创建了ThreadLocalMap用来保存数据
static class Entry extends WeakReference<ThreadLocal<?>> { /** The value associated with this ThreadLocal. */ Object value; Entry(ThreadLocal<?> k, Object v) { super(k); value = v; } } }
内部继承弱引用,当map为空时会被gc回收
- 四种引用类型
– 强引用:除非为null,内存不足也不会进行回收
– 弱引用:内存不足时GC会将其回收
– 软应用:无论是否有用,GC时会将其回收
– 虚引用:近似于没有引用,用于跟踪对象被垃圾回收器回收的活动
@Component public class HostHolder { private ThreadLocal<User> users = new ThreadLocal<>(); public User getUser() { return users.get(); } public void setUser(User user) { users.set(user); } public void clear() { users.remove(); } }
用ThreadLocal保存user数据
下面实例代码介绍登录拦截器+ThreadLocal实现用户信息存储
/** * 登录拦截器 */ public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前进行调用,返回true则继续向下执行,返回false则中断请求 String loginId = request.getHeader("loginId"); if (StringUtils.isNotBlank(loginId)) { // 如果请求头中包含loginId,将其设置到LoginContextHolder中 LoginContextHolder.set("loginId", loginId); } return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行,主要是做清理工作 // 移除LoginContextHolder中的loginId LoginContextHolder.remove(); } }
到此这篇关于springboot登录拦截器+ThreadLocal实现用户信息存储的实例代码的文章就介绍到这了,更多相关springboot登录拦截器用户信息存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
- SpringBoot中获取微信用户信息的方法
- SpringBoot+SpringCloud用户信息微服务传递实现解析
- Springboot+Shiro记录用户登录信息并获取当前登录用户信息的实现代码
- SpringBoot使用Redis的zset统计在线用户信息
- Springboot通过请求头获取当前用户信息方法详细示范
- SpringBoot登录、退出、获取用户信息的session处理方案
- springboot如何完美通过token获取用户信息
- SpringBoot通过参数注解自动获取当前用户信息的方法
- SpringBoot中的ThreadLocal保存请求用户信息的实例demo
- springboot获取当前用户信息的三种方式
相关文章
Spring data jpa @Query update的坑及解决
这篇文章主要介绍了Spring data jpa @Query update的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-02-02Windows下 IDEA编译调试 hive2.3.9的过程解析
这篇文章主要介绍了Windows下 IDEA编译调试 hive2.3.9的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-07-07
最新评论