Java使用ThreadLocal實現(xiàn)當前登錄信息的存取功能
一、使用ThreadLocal實現(xiàn)當前登錄信息的存取
在項目中我們增加一個員工有一些信息是需要我們自己填入的,有一些信息不需要我們自己填寫,例如:創(chuàng)建時間,創(chuàng)建人等,那么這些事件我們通常就是使用實體類然后set相關(guān)屬性,但是我們可以使用MetaObjectHandler來將這些不要要我們自己穿的參數(shù)進行默認填充,但是創(chuàng)建人和更新人是獲取的當前用戶登錄人。
我們都知道想要獲取當前的登錄人就需要使用HttpServletRequest來獲取,但是我們字符串填充類沒有這個,那么我們就可以使用ThreadLocal來實現(xiàn)當前登錄信息的存取。
ThreadLocal的實現(xiàn)原理就是,一個線程里面有局部變量,我們可以利用局部變量來存取數(shù)據(jù),當然我們必須保證是同一個線程這樣才能準確的存儲和獲取數(shù)據(jù),在我們一個請求流程下來我們都使用的一個線程,所以這里我們就可以使用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、判斷登錄狀態(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的地方進行讀?。?/p>

@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());
}
在上面的方法寫完成后,我們直接運行程序,然后新增和修改員工就會進入這些方法然后進行字段填充操作。
二、總結(jié)
這里的相關(guān)內(nèi)容還沒有整理完畢,文章后面持續(xù)更新,建議收藏。
文章中涉及到的命令大家一定要像我一樣每個都敲幾遍,只有在敲的過程中才能發(fā)現(xiàn)自己對命令是否真正的掌握了。
到此這篇關(guān)于Java使用ThreadLocal實現(xiàn)當前登錄信息的存取功能的文章就介紹到這了,更多相關(guān)Java ThreadLocal當前登錄信息的存取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Java項目中實現(xiàn)CI/CD持續(xù)集成與持續(xù)部署
這篇文章主要為大家介紹了在Java項目中實現(xiàn)CI/CD持續(xù)集成與持續(xù)部署詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
SpringBoot集成ActiveMQ的實戰(zhàn)全過程
消息隊列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合、異步消息、流量削鋒等問題,實現(xiàn)高性能、高可用、可伸縮和最終一致性架構(gòu),是大型分布式系統(tǒng)不可缺少的中間件,這篇文章主要給大家介紹了關(guān)于SpringBoot集成ActiveMQ的相關(guān)資料,需要的朋友可以參考下2021-11-11
Mybatis?XML配置文件實現(xiàn)增刪改查的示例代碼
本文主要介紹了Mybatis?XML配置文件實現(xiàn)增刪改查的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-03-03

