91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么使用ThreadLocal實現當前登錄信息的存取功能

發布時間:2023-02-22 11:58:50 來源:億速云 閱讀:158 作者:iii 欄目:開發技術

本篇內容主要講解“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實現當前登錄信息的存取功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    曲沃县| 馆陶县| 丹寨县| 和平区| 翁牛特旗| 师宗县| 惠安县| 阜城县| 松桃| 内乡县| 邢台县| 仪征市| 丹棱县| 五大连池市| 保康县| 中方县| 田林县| 四川省| 长寿区| 武隆县| 南雄市| 盐城市| 马鞍山市| 常山县| 忻城县| 公安县| 横峰县| 四子王旗| 新营市| 赤水市| 黑龙江省| 九龙县| 高碑店市| 得荣县| 鄂尔多斯市| 嘉义市| 潜山县| 玛沁县| 沙河市| 鹰潭市| 万宁市|