Java使用ThreadLocal實(shí)現(xiàn)當(dāng)前登錄信息的存取功能
一、使用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)文章
Java7到Java17之Switch語(yǔ)句進(jìn)化史示例詳解
這篇文章主要為大家介紹了Java7到Java17之Switch語(yǔ)句進(jìn)化史示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法
今天小編就為大家分享一篇Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06使用Java實(shí)現(xiàn)系統(tǒng)托盤功能的介紹(附源碼以及截圖)
本篇文章介紹了,在Java中實(shí)現(xiàn)系統(tǒng)托盤功能的詳解,文中附源碼以及截圖介紹。需要的朋友參考下2013-05-05Spring?注入靜態(tài)對(duì)象使用三種方式示例
這篇文章主要為大家介紹了Spring注入靜態(tài)對(duì)象使用的三種方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07使用java swing實(shí)現(xiàn)qq登錄界面示例分享
這篇文章主要介紹了使用java swing實(shí)現(xiàn)qq登錄界面示例,需要的朋友可以參考下2014-04-04基于SpringBoot實(shí)現(xiàn)驗(yàn)證碼功能(兩種驗(yàn)證碼方式)
這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)驗(yàn)證碼功能,今天我們介紹的是兩種主流的驗(yàn)證碼,一種就是進(jìn)行計(jì)算的驗(yàn)證碼,另外一種就是不需要計(jì)算,直接輸入的驗(yàn)證碼,需要的朋友可以參考下2024-08-08