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

发布时间:2023-02-22 11:58:50 作者:iii
来源:亿速云 阅读:222

本篇内容主要讲解“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实现当前登录信息的存取功能”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. java中的ThreadLocal能干什么
  2. Java多线程ThreadLocal的知识点有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

threadlocal java

上一篇:基于JavaScript如何实现图片裁剪功能

下一篇:Java怎么通过URL类下载图片

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》