亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot如何獲取當(dāng)前操作用戶的id/信息

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

一、概述

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

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

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

  我希望借助mybatis的默認(rèn)插件:MetaObjectHandler類實(shí)現(xiàn)公共字段的插入和更改,如:創(chuàng)建者、更新者、創(chuàng)建時(shí)間、更新時(shí)間、刪除狀態(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用于存儲(chǔ)當(dāng)前線程的用戶信息,redis用于存儲(chǔ)登錄用戶信息,如:根據(jù)token獲取用戶信息,然后再把用戶信息存入ThreadLocl

二、代碼示例

  1.首先定義一個(gè)過(guò)濾器,用于獲取請(qǐng)求的token,然后根據(jù)token獲取響應(yīng)的用戶信息,獲取到用戶信息后把用戶信息存儲(chǔ)的WebContextHolder中(ps:此類是一個(gè)封裝了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)建一個(gè)ThreadLocal用于存儲(chǔ)用戶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獲取當(dāng)前操作用戶的id/信息的文章就介紹到這了,更多相關(guān)SpringBoot獲取當(dāng)前用戶id內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一篇文章帶你了解jdk1.8新特性--為什么使用lambda表達(dá)式

    一篇文章帶你了解jdk1.8新特性--為什么使用lambda表達(dá)式

    Lambda是一個(gè)匿名函數(shù),我們可以把Lambda表達(dá)式理解為是一段可以傳遞的代碼,本篇文章就帶你了解,希望能給你帶來(lái)幫助
    2021-08-08
  • Spring Boot中使用JSR-303實(shí)現(xiàn)請(qǐng)求參數(shù)校驗(yàn)

    Spring Boot中使用JSR-303實(shí)現(xiàn)請(qǐng)求參數(shù)校驗(yàn)

    這篇文章主要介紹了Spring Boot中使用JSR-303實(shí)現(xiàn)請(qǐng)求參數(shù)校驗(yàn),JSR-303校驗(yàn)我們一般都是對(duì)Java的實(shí)體類對(duì)象進(jìn)行校驗(yàn),主要檢驗(yàn)JSR-303是Java中的一個(gè)規(guī)范,用于實(shí)現(xiàn)請(qǐng)求參數(shù)校驗(yàn)在我們的實(shí)體類對(duì)象的屬性上,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • java異常處理詳細(xì)介紹及實(shí)例

    java異常處理詳細(xì)介紹及實(shí)例

    這篇文章主要介紹了java異常處理詳細(xì)介紹及實(shí)例的相關(guān)資料,本文對(duì)java異常進(jìn)行了知識(shí)層次的總結(jié),需要的朋友可以參考下
    2017-04-04
  • springboot使用jasypt加密庫(kù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)加解密示例代碼

    springboot使用jasypt加密庫(kù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)加解密示例代碼

    這篇文章主要給大家介紹了關(guān)于springboot使用jasypt加密庫(kù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)加解密的相關(guān)資料,Jasypt是一個(gè)用于配置文件加密的Java庫(kù),它可以用來(lái)加密和解密配置文件中的敏感信息,如數(shù)據(jù)庫(kù)密碼、API?密鑰等,需要的朋友可以參考下
    2024-04-04
  • logback的isDebugEnabled日志配置級(jí)別源碼解析

    logback的isDebugEnabled日志配置級(jí)別源碼解析

    這篇文章主要為大家介紹了logback的isDebugEnabled日志配置級(jí)別源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Android 屏幕分辨率的整理

    Android 屏幕分辨率的整理

    這篇文章主要介紹了Android 屏幕分辨率的整理的相關(guān)資料,這里整理了常見(jiàn)的分辨率希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • java selenium教程環(huán)境搭建方法

    java selenium教程環(huán)境搭建方法

    本文主要介紹java selenium 環(huán)境搭建,這里詳細(xì)介紹了selenium的安裝環(huán)境搭建,有興趣的小伙伴可以參考下
    2016-08-08
  • 關(guān)于java.lang.NumberFormatException: null的問(wèn)題及解決

    關(guān)于java.lang.NumberFormatException: null的問(wèn)題及解決

    這篇文章主要介紹了關(guān)于java.lang.NumberFormatException: null的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java生成二維碼并且給二維碼添加logo

    java生成二維碼并且給二維碼添加logo

    這篇文章主要介紹了java生成二維碼并且給二維碼添加logo的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Spring中的@ResponseStatus使用

    Spring中的@ResponseStatus使用

    這篇文章主要介紹了Spring中的@ResponseStatus使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論