欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用ThreadLocal實(shí)現(xiàn)當(dāng)前登錄信息的存取功能

 更新時(shí)間:2023年02月21日 16:09:02   作者:曠世奇才李先生  
ThreadLocal和其他并發(fā)工具一樣,也是用于解決多線程并發(fā)訪問(wèn),下這篇文章主要給大家介紹了關(guān)于Java使用ThreadLocal實(shí)現(xiàn)當(dāng)前登錄信息的存取功能,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、使用ThreadLocal實(shí)現(xiàn)當(dāng)前登錄信息的存取

在項(xiàng)目中我們?cè)黾右粋€(gè)員工有一些信息是需要我們自己填入的,有一些信息不需要我們自己填寫,例如:創(chuàng)建時(shí)間,創(chuàng)建人等,那么這些事件我們通常就是使用實(shí)體類然后set相關(guān)屬性,但是我們可以使用MetaObjectHandler來(lái)將這些不要要我們自己穿的參數(shù)進(jìn)行默認(rèn)填充,但是創(chuàng)建人和更新人是獲取的當(dāng)前用戶登錄人。

我們都知道想要獲取當(dāng)前的登錄人就需要使用HttpServletRequest來(lái)獲取,但是我們字符串填充類沒有這個(gè),那么我們就可以使用ThreadLocal來(lái)實(shí)現(xiàn)當(dāng)前登錄信息的存取。

ThreadLocal的實(shí)現(xiàn)原理就是,一個(gè)線程里面有局部變量,我們可以利用局部變量來(lái)存取數(shù)據(jù),當(dāng)然我們必須保證是同一個(gè)線程這樣才能準(zhǔn)確的存儲(chǔ)和獲取數(shù)據(jù),在我們一個(gè)請(qǐng)求流程下來(lái)我們都使用的一個(gè)線程,所以這里我們就可以使用ThreadLocal來(lái)進(jìn)行信息的存取。

1,寫一個(gè)工具類用于存取用戶id

/**
 * @Author: KSQC
 * @Description: 基于ThreadLocal對(duì)登陸用戶信息進(jìn)行存儲(chǔ)和讀取
 * @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、在用戶登錄的時(shí)候我們?cè)谶^(guò)濾器中可以獲取用戶的id,這個(gè)時(shí)候我們將用戶id放入ThreadLocal中。

  //4、判斷登錄狀態(tài),如果已登錄,則直接放行
        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的地方進(jìn)行讀?。?/p>

 @Override
    public void insertFill(MetaObject metaObject) {
        log.info("公共字段自動(dòng)填充[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());
    }

在上面的方法寫完成后,我們直接運(yùn)行程序,然后新增和修改員工就會(huì)進(jìn)入這些方法然后進(jìn)行字段填充操作。

二、總結(jié)

這里的相關(guān)內(nèi)容還沒有整理完畢,文章后面持續(xù)更新,建議收藏。

文章中涉及到的命令大家一定要像我一樣每個(gè)都敲幾遍,只有在敲的過(guò)程中才能發(fā)現(xiàn)自己對(duì)命令是否真正的掌握了。

到此這篇關(guān)于Java使用ThreadLocal實(shí)現(xiàn)當(dāng)前登錄信息的存取功能的文章就介紹到這了,更多相關(guān)Java ThreadLocal當(dāng)前登錄信息的存取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論