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

springboot登錄攔截器+ThreadLocal實(shí)現(xiàn)用戶信息存儲(chǔ)的實(shí)例代碼

 更新時(shí)間:2024年03月07日 12:09:11   作者:彭于晏689  
ThreadLocal 為變量在每個(gè)線程中創(chuàng)建了一個(gè)副本,這樣每個(gè)線程都可以訪問自己內(nèi)部的副本變量,這篇文章主要介紹了springboot登錄攔截器+ThreadLocal實(shí)現(xiàn)用戶信息存儲(chǔ)的實(shí)例代碼,需要的朋友可以參考下

ThreadLocal

  • 是什么

從名字我們就可以看到ThreadLocal 叫做本地線程變量,意思是說,ThreadLocal 中填充的的是當(dāng)前線程的變量,該變量對其他線程而言是封閉且隔離的,ThreadLocal 為變量在每個(gè)線程中創(chuàng)建了一個(gè)副本,這樣每個(gè)線程都可以訪問自己內(nèi)部的副本變量。
1、在進(jìn)行對象跨層傳遞的時(shí)候,使用ThreadLocal可以避免多次傳遞,打破層次間的約束。
2、線程間數(shù)據(jù)隔離
3、進(jìn)行事務(wù)操作,用于存儲(chǔ)線程事務(wù)信息。
4、數(shù)據(jù)庫連接,Session會(huì)話管理。

  • 內(nèi)部實(shí)現(xiàn)

創(chuàng)建了ThreadLocalMap用來保存數(shù)據(jù)

static class Entry extends WeakReference<ThreadLocal<?>> {
        /** The value associated with this ThreadLocal. */
        Object value;
        Entry(ThreadLocal<?> k, Object v) {
            super(k);
            value = v;
        }
    }
}

內(nèi)部繼承弱引用,當(dāng)map為空時(shí)會(huì)被gc回收

  • 四種引用類型

– 強(qiáng)引用:除非為null,內(nèi)存不足也不會(huì)進(jìn)行回收
– 弱引用:內(nèi)存不足時(shí)GC會(huì)將其回收
– 軟應(yīng)用:無論是否有用,GC時(shí)會(huì)將其回收
– 虛引用:近似于沒有引用,用于跟蹤對象被垃圾回收器回收的活動(dòng)

@Component
public class HostHolder {
    private ThreadLocal<User> users = new ThreadLocal<>();
    public User getUser() {
        return users.get();
    }
    public void setUser(User user) {
        users.set(user);
    }
    public void clear() {
        users.remove();
    }
}

用ThreadLocal保存user數(shù)據(jù)

下面實(shí)例代碼介紹登錄攔截器+ThreadLocal實(shí)現(xiàn)用戶信息存儲(chǔ)

/**
 * 登錄攔截器
 */
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在請求處理之前進(jìn)行調(diào)用,返回true則繼續(xù)向下執(zhí)行,返回false則中斷請求
        String loginId = request.getHeader("loginId");
        if (StringUtils.isNotBlank(loginId)) {
            // 如果請求頭中包含loginId,將其設(shè)置到LoginContextHolder中
            LoginContextHolder.set("loginId", loginId);
        }
        return true;
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在整個(gè)請求結(jié)束之后被調(diào)用,也就是在DispatcherServlet渲染了對應(yīng)的視圖之后執(zhí)行,主要是做清理工作
        // 移除LoginContextHolder中的loginId
        LoginContextHolder.remove();
    }
}

到此這篇關(guān)于springboot登錄攔截器+ThreadLocal實(shí)現(xiàn)用戶信息存儲(chǔ)的實(shí)例代碼的文章就介紹到這了,更多相關(guān)springboot登錄攔截器用戶信息存儲(chǔ)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RSA加密的方式和解密方式實(shí)現(xiàn)方法(推薦)

    RSA加密的方式和解密方式實(shí)現(xiàn)方法(推薦)

    下面小編就為大家?guī)硪黄猂SA加密的方式和解密方式實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 基于java集合中的一些易混淆的知識(shí)點(diǎn)(詳解)

    基于java集合中的一些易混淆的知識(shí)點(diǎn)(詳解)

    下面小編就為大家?guī)硪黄趈ava集合中的一些易混淆的知識(shí)點(diǎn)(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • MyBatis一級(jí)與二級(jí)緩存相關(guān)配置

    MyBatis一級(jí)與二級(jí)緩存相關(guān)配置

    mybatis-plus是一個(gè)Mybatis的增強(qiáng)工具,在Mybatis的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,這篇文章帶你了解Mybatis的一級(jí)和二級(jí)緩存
    2023-01-01
  • Java消息隊(duì)列RabbitMQ之消息回調(diào)詳解

    Java消息隊(duì)列RabbitMQ之消息回調(diào)詳解

    這篇文章主要介紹了Java消息隊(duì)列RabbitMQ之消息回調(diào)詳解,消息回調(diào),其實(shí)就是消息確認(rèn)(生產(chǎn)者推送消息成功,消費(fèi)者接收消息成功)  , 對于程序來說,發(fā)送者沒法確認(rèn)是否發(fā)送成功,需要的朋友可以參考下
    2023-07-07
  • 在SpringBoot中使用YourKit進(jìn)行性能調(diào)優(yōu)的教程詳解

    在SpringBoot中使用YourKit進(jìn)行性能調(diào)優(yōu)的教程詳解

    在應(yīng)用程序的開發(fā)過程中,性能調(diào)優(yōu)是一個(gè)重要的環(huán)節(jié),在SpringBoot應(yīng)用程序中,我們可以使用YourKit來進(jìn)行性能調(diào)優(yōu),YourKit是一款非常強(qiáng)大的Java性能調(diào)優(yōu)工具,在本文中,我們將介紹如何在 SpringBoot應(yīng)用程序中使用YourKit進(jìn)行性能調(diào)優(yōu)
    2023-06-06
  • Java應(yīng)用層協(xié)議WebSocket實(shí)現(xiàn)消息推送

    Java應(yīng)用層協(xié)議WebSocket實(shí)現(xiàn)消息推送

    后端向前端推送消息就需要長連接,首先想到的就是websocket,下面這篇文章主要給大家介紹了關(guān)于java后端+前端使用WebSocket實(shí)現(xiàn)消息推送的詳細(xì)流程,需要的朋友可以參考下
    2023-02-02
  • Java自帶定時(shí)任務(wù)ScheduledThreadPoolExecutor實(shí)現(xiàn)定時(shí)器和延時(shí)加載功能

    Java自帶定時(shí)任務(wù)ScheduledThreadPoolExecutor實(shí)現(xiàn)定時(shí)器和延時(shí)加載功能

    今天小編就為大家分享一篇關(guān)于Java自帶定時(shí)任務(wù)ScheduledThreadPoolExecutor實(shí)現(xiàn)定時(shí)器和延時(shí)加載功能,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java如何解析html中的內(nèi)容并存到數(shù)據(jù)庫詳解

    Java如何解析html中的內(nèi)容并存到數(shù)據(jù)庫詳解

    最近用到了Java解析Html的一個(gè)庫Jsoup,所以下面這篇文章主要給大家介紹了關(guān)于Java如何解析html中的內(nèi)容并存到數(shù)據(jù)庫的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • 帶你輕松了解Modbus協(xié)議

    帶你輕松了解Modbus協(xié)議

    這篇文章主要給大家介紹了關(guān)于Modbus協(xié)議的相關(guān)資料,此協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進(jìn)行通信的,需要的朋友可以參考下
    2021-11-11
  • spring Data jpa簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    spring Data jpa簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了spring Data jpa簡介的相關(guān)資料,需要的朋友可以參考下
    2017-09-09

最新評(píng)論