Java使用ThreadLocal实现当前登录信息的存取功能

 更新时间:2023年2月23日 08:36  点击:427 作者:旷世奇才李先生

一、使用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());
    }

在上面的方法写完成后,我们直接运行程序,然后新增和修改员工就会进入这些方法然后进行字段填充操作。

二、总结

这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。

文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。

到此这篇关于Java使用ThreadLocal实现当前登录信息的存取功能的文章就介绍到这了,更多相关Java ThreadLocal当前登录信息的存取内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

原文出处:https://blog.csdn.net/weixin_44096133/article/details/129073

[!--infotagslink--]

相关文章

  • 关于ThreadLocal对request和response的用法说明

    这篇文章主要介绍了关于ThreadLocal对request和response的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-18
  • TensorFLow 不同大小图片的TFrecords存取实例

    今天小编就为大家分享一篇TensorFLow 不同大小图片的TFrecords存取实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22
  • Java中的ThreadLocal功能演示示例

    这篇文章主要介绍了Java中的ThreadLocal功能演示示例,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下...2021-02-07
  • Java之ThreadLocal使用常见和方式案例讲解

    这篇文章主要介绍了Java之ThreadLocal使用常见和方式案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-09
  • 如何在C++中实现按位存取

    实现紧凑存取,不是按一个字节一个字节地存取,而是按位存取,本文就是介绍了如何在C++中实现按位存取,需要的朋友可以参考下...2020-04-25
  • 详解Java中的ThreadLocal

    ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个副本,在实际多线程操作的时候,操作的是自己本地内存中的变量,从而规避了线程安全问题...2021-06-11
  • 详解Java中ThreadLocal类型及简单用法

    ThreadLocal实例通常是希望将状态与线程关联起来的类中的私有静态字段,下面通过例子给大家详细介绍Java中ThreadLocal类型及简单用法,感兴趣的朋友跟随小编一起看看吧...2021-10-14
  • java中ThreadLocal的应用场景实例分析

    在本篇文章里小编给大家整理的是一篇关于java中ThreadLocal的应用场景实例分析,对此有兴趣的朋友们可以学习参考下。...2021-02-17
  • Java使用ThreadLocal实现当前登录信息的存取功能

    ThreadLocal和其他并发工具一样,也是用于解决多线程并发訪问,下这篇文章主要给大家介绍了关于Java使用ThreadLocal实现当前登录信息的存取功能,文中通过实例代码介绍的非常详细,需要的朋友可以参考下...2023-02-23
  • 对ThreadLocal内存泄漏及弱引用的理解

    这篇文章主要介绍了对ThreadLocal内存泄漏及弱引用的理解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-01-29
  • C#多线程之线程绑定ThreadLocal类

    这篇文章介绍了C#多线程之线程绑定ThreadLocal类的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2022-06-17
  • 不规范使用ThreadLocal导致bug分析解决

    这篇文章主要为大家介绍了不规范使用ThreadLocal导致bug分析解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...2023-01-10
  • Java 超详细讲解ThreadLocal类的使用

    写SpringBoot项目的时候,经常用到的一个保存用户信息的类就是Threadlocal,我们今天就来详细介绍一下这个类,感兴趣的朋友来看看吧...2022-04-07
  • Java中ThreadLocal线程变量的实现原理

    本文主要介绍了Java中ThreadLocal线程变量的实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2022-06-26