Springboot使用ThreadLocal提供線程局部變量,傳遞登錄用戶名

文章目錄

  • 概述
  • 使用
    • 創建ThreadLocalUtil工具類
    • 在登錄攔截器中使用ThreadLocal存儲登錄用戶名
    • 在/userInfo接口中獲取登錄用戶名
  • 注意事項
  • 參考視頻


概述

在這里插入圖片描述
在這里插入圖片描述

使用

創建ThreadLocalUtil工具類

utils/ThreadLocalUtil.java

package org.example.utils;/*** ThreadLocal 工具類*/
@SuppressWarnings("all")
public class ThreadLocalUtil {//提供ThreadLocal對象,private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();//根據鍵獲取值public static <T> T get(){return (T) THREAD_LOCAL.get();}//存儲鍵值對public static void set(Object value){THREAD_LOCAL.set(value);}//清除ThreadLocal 防止內存泄漏public static void remove(){THREAD_LOCAL.remove();}
}

在登錄攔截器中使用ThreadLocal存儲登錄用戶名

interceptors/LoginInteceptor.java

//將解析用戶名保存到ThreadLocal中
ThreadLocalUtil.set(claims);

在這里插入圖片描述
請求處理完成后,清空ThreadLocal中的數據,防止內存泄漏

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 請求處理完成后,清空ThreadLocal中的數據ThreadLocalUtil.remove();
}

在這里插入圖片描述

在/userInfo接口中獲取登錄用戶名

controller/UserController.java

//從threadLocal中獲取用戶信息
Map<String, Object> claims = ThreadLocalUtil.get();
String username = (String) claims.get("username");

在這里插入圖片描述

注意事項

在這里插入圖片描述

參考視頻

https://www.bilibili.com/video/BV14z4y1N7pg?spm_id_from=333.788.player.switch&vd_source=0467ab39cc5ec5940fee22a0e7797575&p=23

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78921.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78921.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78921.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1399. 統計最大組的數目

1399. 統計最大組的數目 題目鏈接&#xff1a;1399. 統計最大組的數目 代碼如下&#xff1a; class Solution { public:int countLargestGroup(int n) {int res 0;unordered_map<int, int> um;int maxValue 0;for (int i 1;i < n;i) {string value to_string(i);…

VS Code 插件Git History Diff 使用

右上角 查看單個文件記錄

數學建模論文手的學習日常01

目錄 一.要寫的內容&#xff1a; 二.文章標題&#xff1a; 三.摘要&#xff08;非常非常非常重要&#xff09; 四、關鍵詞&#xff1a; 五、問題重述 六、模型假設 七、符號說明 八、模型的建立與求解 九、模型的分析與檢驗 十、模型的評價、改進與推廣 十一、參考…

深度學習: AI 體育領域

一、引言 在科技與體育深度融合的當下&#xff0c;AI 體育逐漸成為推動體育行業變革的重要力量。深度學習憑借其強大的數據分析與模式識別能力&#xff0c;為 AI 體育帶來了全新的發展機遇。從運動員動作分析到智能健身指導&#xff0c;從賽事預測到運動康復輔助&#xff0c;深…

在 Ubuntu24.04 LTS 上 Docker 部署英文版 n8n 和 部署中文版 n8n-i18n-chinese

一、n8n 簡介 n8n 是一個低代碼&#xff08;Low-Code&#xff09;工作流自動化平臺&#xff0c;可以幫助用戶以非常簡單的方式創建自動化流程&#xff0c;連接不同的應用程序和服務。n8n的設計理念是為了讓復雜的工作流變得簡單易用&#xff0c;同時也支持高度的自定義&#xf…

《系統分析師-第三階段—總結(八)》

背景 采用三遍讀書法進行閱讀&#xff0c;此階段是第三遍。 過程 本篇總結第15章的內容 第15章 總結 系統運行與維護&#xff0c;系統經過測試交付之后&#xff0c;進入運行維護階段&#xff0c;維護分為系統運行、故障維護、系統評價和系統相關的策略。 疑問&#xff1a;…

LeetCode 1295.統計位數為偶數的數字:模擬

【LetMeFly】1295.統計位數為偶數的數字&#xff1a;模擬 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/find-numbers-with-even-number-of-digits/ 給你一個整數數組 nums&#xff0c;請你返回其中位數為 偶數 的數字的個數。 示例 1&#xff1a; 輸入&#xff1…

DDD是什么?電商系統舉例

一、DDD的基本概念 領域驅動設計&#xff08;Domain-Driven Design&#xff0c;簡稱DDD&#xff09;是由Eric Evans提出的一種軟件開發方法論&#xff0c;旨在應對復雜業務系統的設計和實現。它的核心思想是將軟件的設計與業務領域緊密結合&#xff0c;通過深入理解業務需求&a…

K8S ConfigMap 快速開始

一、什么是 ConfigMap&#xff1f; ConfigMap 是 Kubernetes 中用于存儲非敏感配置數據的 API 對象&#xff0c;支持以鍵值對&#xff08;Key-Value&#xff09;或文件的形式存儲配置&#xff0c;允許將配置與鏡像解耦&#xff0c;實現配置的集中管理和動態更新。 二、主要用…

Prometheus使用Recoding Rules優化性能

通過PromQL可以實時對Prometheus中采集到的樣本數據進行查詢&#xff0c;聚合以及其它各種運算操作。而在某些PromQL較為復雜且計算量較大時&#xff0c;直接使用PromQL可能會導致Prometheus響應超時的情況。這時需要一種能夠類似于后臺批處理的機制能夠在后臺完成這些復雜運算…

C++ RAII 編程范式詳解

C RAII 編程范式詳解 一、RAII 核心概念 RAII&#xff08;Resource Acquisition Is Initialization&#xff0c;資源獲取即初始化&#xff09; 是 C 的核心編程范式&#xff0c;通過將資源生命周期與對象生命周期綁定實現安全、自動化的資源管理。 核心原則&#xff1a; 資源…

Rust 學習筆記:枚舉與模式匹配

Rust 學習筆記&#xff1a;枚舉與模式匹配 Rust 學習筆記&#xff1a;枚舉與模式匹配定義枚舉&#xff08;Enum&#xff09;枚舉變量Option 枚舉及其相對于 NULL 的優勢match 和枚舉與 Option\<T\> 匹配match 應該是詳盡的Catch-all 模式和 _ 占位符使用 if let 和 let e…

《WebGIS之Vue進階教程》(13)ref的實現

1 為什么需要ref 由于proxy只能代理引用類型數據(如: 對象, 數組, Set, Map...), 需要一種方式代理普通類型數據(String, Number, Boolean...) 設計ref主要是為了處理普通類型數據, 使普通類型數據也具有響應式 除此之外, 通過reactive代理的對象可能會出現響應丟失的情況. 使…

Redis 緩存并發問題深度解析:擊穿、雪崩與穿透防治指南

Redis-緩存并發 引言&#xff1a;緩存&#xff0c;高性能架構的基石與并發挑戰一、 緩存擊穿&#xff1a;熱點 Key 失效引發的“單點風暴”1.1 什么是緩存擊穿&#xff1f;1.2 緩存擊穿的風險1.3 緩存擊穿的解決方案1.3.1 互斥鎖&#xff08;Mutex Lock&#xff09;/ 分布式鎖 …

Python 數據智能實戰 (4):智能用戶分群 - 融合行為

寫在前面 —— 超越 RFM 標簽,結合用戶行為與 LLM 文本洞察,實現更精準、更立體的客戶細分 歡迎回來!在前面的學習中,我們已經為 Python 數據智能工具箱添置了與大語言模型 (LLM) 交互的能力,特別是掌握了如何利用 LLM 將非結構化的文本信息轉化為包含深層語義的數值向量…

FreeMarker語法深度解析與Node.js集成實踐指南

一、FreeMarker核心語法體系 1.1 基礎模板結構 <#-- 注釋語法 --> ${expression} <#-- 輸出表達式 --> <#directive paramvalue> <#-- 指令語法 -->1.2 數據類型處理 標量類型深度處理&#xff1a; <#assign num 123.45?floor> <#--…

【計算機視覺】目標檢測:深度解析YOLOv5:下一代實時目標檢測框架實戰指南

深度解析YOLOv5&#xff1a;下一代實時目標檢測框架實戰指南 技術演進與架構設計YOLO系列發展脈絡YOLOv5核心架構1. 骨干網絡&#xff08;Backbone&#xff09;2. 特征融合&#xff08;Neck&#xff09;3. 檢測頭&#xff08;Head&#xff09; 環境配置與快速開始硬件要求建議詳…

STM32 定時器TIM

定時器基礎知識 定時器就是用來定時的機器&#xff0c;是存在于STM32單片機中的一個外設。STM32總共有8個定時器&#xff0c;分別是2個高級定時器(TIM1、TIM8)&#xff0c;4個通用定時器(TIM2、TIM3、TIM4、TIM5)和2個基本定時器(TIM6、TIM7)&#xff0c;如下圖所示: STM32F1…

OpenObserve API Usage Guide for Log Management

OpenObserve API Usage Guide for Audit Log Management 1. 概述 1.1 目標 本文檔旨在詳細介紹 OpenObserve 的 API 使用方法&#xff0c;幫助用戶通過 API 實現日志管理功能&#xff0c;包括日志攝入、查詢、模糊匹配&#xff08;類似 SQL 的 LIKE&#xff09;、stream 管理…

消防崗位技能競賽流程方案策劃

一、比賽目的&#xff1a; 為大力倡導“11.9”全國消防安全活動月&#xff0c;緊緊圍繞“人人參與消防&#xff0c;共創平安和諧”的活動主題&#xff0c;結合公司實際情況&#xff0c;特開展一次消防技能競賽活動。開展一場比思想、比工作作風、比消防業務技能、比業余文化生…