服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java使用ThreadLocal实现当前登录信息的存取功能

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

2023-03-02 13:53旷世奇才李先生 Java教程

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

一、使用ThreadLocal实现当前登录信息的存取

在项目中我们增加一个员工有一些信息是需要我们自己填入的,有一些信息不需要我们自己填写,例如:创建时间,创建人等,那么这些事件我们通常就是使用实体类然后set相关属性,但是我们可以使用MetaObjectHandler来将这些不要要我们自己穿的参数进行默认填充,但是创建人和更新人是获取的当前用户登录人。

我们都知道想要获取当前的登录人就需要使用HttpServletRequest来获取,但是我们字符串填充类没有这个,那么我们就可以使用ThreadLocal来实现当前登录信息的存取。

ThreadLocal的实现原理就是,一个线程里面有局部变量,我们可以利用局部变量来存取数据,当然我们必须保证是同一个线程这样才能准确的存储和获取数据,在我们一个请求流程下来我们都使用的一个线程,所以这里我们就可以使用ThreadLocal来进行信息的存取。

1,写一个工具类用于存取用户id

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

/**
* @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中。

Java使用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的地方进行读取:

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

 @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/129073816

延伸 · 阅读

精彩推荐