最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot如何獲取當前操作用戶的id/信息

 更新時間:2023年10月25日 11:00:24   作者:飄楊......  
在一般性的基設(shè)需求中,有需要獲取當前用戶操作記錄的情況,也就是說我們需要記錄當前用戶的信息,如:id、昵稱、賬號等信息,這篇文章主要介紹了SpringBoot獲取當前操作用戶的id/信息,需要的朋友可以參考下

一、概述

  在一般性的基設(shè)需求中,有需要獲取當前用戶操作記錄的情況,也就是說我們需要記錄當前用戶的信息。如:id、昵稱、賬號等信息。

  這些信息一般用于記錄用戶的個人行為,例如:用戶的操作日志,記錄某些數(shù)據(jù)的更改或者添加者信息等。

  本例主要用于記錄更改及添加者信息(操作數(shù)據(jù)庫時)

  我希望借助mybatis的默認插件:MetaObjectHandler類實現(xiàn)公共字段的插入和更改,如:創(chuàng)建者、更新者、創(chuàng)建時間、更新時間、刪除狀態(tài)等。

this.strictInsertFill(metaObject, "createUser", Long.class, memberId);
        this.strictInsertFill(metaObject, "updateUser", Long.class, memberId);
        this.strictInsertFill(metaObject, "updateTime", Date.class, date);
        this.strictInsertFill(metaObject, "createTime", Date.class, date);
        this.strictInsertFill(metaObject, "deleted", Integer.class, 0);

  技術(shù):SpringBoot+ThreadLocal+Redis。其中ThreadLocal用于存儲當前線程的用戶信息,redis用于存儲登錄用戶信息,如:根據(jù)token獲取用戶信息,然后再把用戶信息存入ThreadLocl

二、代碼示例

  1.首先定義一個過濾器,用于獲取請求的token,然后根據(jù)token獲取響應(yīng)的用戶信息,獲取到用戶信息后把用戶信息存儲的WebContextHolder中(ps:此類是一個封裝了ThreadLocal的類)

@Slf4j
@Component
@Order(Ordered.HIGHEST_PRECEDENCE + 1)
public class WebContextHolderFilter extends GenericFilterBean {
    @Autowired
    RedisUtil<AdminUserResponse> redisUtil;
    @Override
    @SneakyThrows
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        try {
            <strong>String token = request.getHeader("Authorization");
            log.info("token:{}",token);
            if (token != null&&!"undefined".equals(token)) {
                AdminUserResponse adminUserResponse = redisUtil.getValue(token);
                WebContextHolder.setMemberId(adminUserResponse.getUserId());
                log.error("用戶id:{}", adminUserResponse.getUserId());
            }</strong>
            filterChain.doFilter(request, response);
        } finally {
            WebContextHolder.clear();
        }
    }
}

  2.創(chuàng)建一個ThreadLocal用于存儲用戶id

public class WebContextHolder {private static final ThreadLocal<Long> THREAD_LOCAL_MEMBER = new ThreadLocal<>();
public static void setMemberId(Long memberId) {
        THREAD_LOCAL_MEMBER.set(memberId);
    }

    public static Long getMemberId() {
        return THREAD_LOCAL_MEMBER.get();
    }
public static void clear() {
        THREAD_LOCAL_MEMBER.remove();
    }
}

  3.在MetaObjectHandler類中使用memberId

@Slf4j
@Component
public class MyBatisMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        <strong>Long memberId </strong><strong>=</strong><strong> WebContextHolder.getMemberId();</strong>
        log.info("memberId:{}",memberId);//用戶id
        Date date = new Date();
        <strong>this.strictInsertFill(metaObject, "createUser", Long.class, memberId);
        this.strictInsertFill(metaObject, "updateUser", Long.class, memberId);
        </strong>this.strictInsertFill(metaObject, "updateTime", Date.class, date);
        this.strictInsertFill(metaObject, "createTime", Date.class, date);
        this.strictInsertFill(metaObject, "deleted", Integer.class, 0);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "updateUser", Long.class, WebContextHolder.getMemberId());
        this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
    }
}

到此這篇關(guān)于SpringBoot獲取當前操作用戶的id/信息的文章就介紹到這了,更多相關(guān)SpringBoot獲取當前用戶id內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 分布式鎖實例教程之防止重復(fù)提交

    分布式鎖實例教程之防止重復(fù)提交

    訂單重復(fù)問題已經(jīng)是老生常談的問題了,下面這篇文章主要給大家介紹了關(guān)于分布式鎖實例教程之防止重復(fù)提交的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-11-11
  • JFinal使用ajaxfileupload實現(xiàn)圖片上傳及預(yù)覽

    JFinal使用ajaxfileupload實現(xiàn)圖片上傳及預(yù)覽

    這篇文章主要為大家詳細介紹了JFinal使用ajaxfileupload實現(xiàn)圖片上傳及預(yù)覽,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 通過自定制LogManager實現(xiàn)程序完全自定義的logger

    通過自定制LogManager實現(xiàn)程序完全自定義的logger

    本章主要闡述怎么完全定制化LogManager來實現(xiàn)應(yīng)用程序完全自定制的logger,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • BigDecimal的toString()、toPlainString()和toEngineeringString()區(qū)別及用法詳解

    BigDecimal的toString()、toPlainString()和toEngineeringString()區(qū)

    使用BigDecimal進行打印的時候,經(jīng)常會對BigDecimal提供的三個toString方法感到好奇,以下整理3個toString方法的區(qū)別及用法,需要的朋友可以參考下
    2023-08-08
  • SpringMVC框架中使用Filter實現(xiàn)請求日志打印方式

    SpringMVC框架中使用Filter實現(xiàn)請求日志打印方式

    這篇文章主要介紹了SpringMVC框架中使用Filter實現(xiàn)請求日志打印方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Maven本地打包war包實現(xiàn)代碼解析

    Maven本地打包war包實現(xiàn)代碼解析

    這篇文章主要介紹了Maven本地打包war包實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-09-09
  • 自己動手寫一個java版簡單云相冊

    自己動手寫一個java版簡單云相冊

    這篇文章主要為大家分享了自己動手寫的一個java版簡單云相冊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Java的JDBC編程使用之連接Mysql數(shù)據(jù)庫

    Java的JDBC編程使用之連接Mysql數(shù)據(jù)庫

    這篇文章主要給大家介紹了關(guān)于Java的JDBC編程使用之連接Mysql數(shù)據(jù)庫的相關(guān)資料,JDBC是一種用于執(zhí)行SQL語句的Java?API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,需要的朋友可以參考下
    2023-12-12
  • HashSet工作原理_動力節(jié)點Java學(xué)院整理

    HashSet工作原理_動力節(jié)點Java學(xué)院整理

    HashSet 底層采用 HashMap 來保存所有元素,因此 HashSet 的實現(xiàn)比較簡單。接下來通過本文給大家介紹HashSet工作原理_動力節(jié)點Java學(xué)院整理,需要的朋友可以參考下
    2017-04-04
  • 將Java程序包打包為.exe文件的操作步驟

    將Java程序包打包為.exe文件的操作步驟

    將Java程序打包為為.exe文件分為倆個步驟:將Java程序打包成Jar包和打包為.exe文件,文中通過圖文結(jié)合的方式給大家講解的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-06-06

最新評論

团风县| 建湖县| 镇远县| 临漳县| 清苑县| 三河市| 白河县| 长海县| 大连市| 哈巴河县| 霍邱县| 黄骅市| 凤台县| 岢岚县| 金塔县| 洛川县| 宁陵县| 泽州县| 桑植县| 鸡泽县| 信阳市| 页游| 临澧县| 浮山县| 华宁县| 虎林市| 融水| 理塘县| 山阴县| 德兴市| 会东县| 和平区| 安图县| 华亭县| 婺源县| 文山县| 漾濞| 盘锦市| 广德县| 青岛市| 遂宁市|