欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring security獲取用戶信息為null或者串值的解決

 更新時間:2024年03月22日 14:22:35   作者:9隨遇而安  
這篇文章主要介紹了spring security獲取用戶信息為null或者串值的解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

spring security獲取用戶信息為null或串值

在spring security,用SecurityContextHolder.getContext().getAuthentication().getPrincipal()獲取登錄用戶的信息

發(fā)現(xiàn)獲取到的用戶有串值現(xiàn)象——獲取用戶信息

發(fā)現(xiàn)獲取到的是別人的信息,偶發(fā)性還有取值為null的情況

問題的原因

經(jīng)同事提醒,是不是用了多線程,查到了問題的原因。

//原代碼
ExecutorService executorService = Executors.newCachedThreadPool(new ThreadFactoryBuilder().setNameFormat("job").build());
 
executorService.execute(() -> {
       //獲取用戶對象
       LoginUserDetails userDetails = (LoginUserDetails)SecurityContextHolder.getContext()
                .getAuthentication().getPrincipal();
        
});
 
//改進后
ExecutorService executorService = Executors.newCachedThreadPool(new ThreadFactoryBuilder().setNameFormat("job").build());
 
SecurityContext securityContext = SecurityContextHolder.getContext();
 
executorService.execute(() -> {
       //把context設(shè)置進去
       SecurityContextHolder.setContext(securityContext);
       //獲取用戶對象
       LoginUserDetails userDetails = (LoginUserDetails)SecurityContextHolder.getContext()
                .getAuthentication().getPrincipal();
        
});
 

源碼:

ThreadLocal是線程獨有的局部變量

只針對當前線程,當前代碼里使用了嵌套線程

子線程里的SecurityContext和父線程里的SecurityContext不是同一個

需要從父線程把SecurityContext傳入到子線程

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于IntBuffer類的基本用法(詳解)

    基于IntBuffer類的基本用法(詳解)

    下面小編就為大家?guī)硪黄贗ntBuffer類的基本用法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java日期轉(zhuǎn)換注解配置date?format時間失效

    Java日期轉(zhuǎn)換注解配置date?format時間失效

    這篇文章主要為大家介紹了Java日期轉(zhuǎn)換注解配置date?format時間失效,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 鄰接表無向圖的Java語言實現(xiàn)完整源碼

    鄰接表無向圖的Java語言實現(xiàn)完整源碼

    這篇文章主要介紹了鄰接表無向圖的Java語言實現(xiàn)完整源碼,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • servlet重定向詳解(八)

    servlet重定向詳解(八)

    這篇文章主要為大家詳細介紹了servlet重定向的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java優(yōu)先隊列?priority?queue

    Java優(yōu)先隊列?priority?queue

    本文主要介紹了Java優(yōu)先隊列?priority?queue,優(yōu)先隊列是一種特殊的數(shù)據(jù)結(jié)構(gòu)隊列中每一個元素都被分配到一個優(yōu)先權(quán)值,出隊順序按照優(yōu)先權(quán)值來劃分。一般有兩種出隊順序高優(yōu)先權(quán)出隊或低優(yōu)先權(quán)出隊,想了解具體內(nèi)容的小伙伴可以參考下文內(nèi)容,希望對你有所幫助
    2021-12-12
  • SpringMVC中的表現(xiàn)層結(jié)果封裝

    SpringMVC中的表現(xiàn)層結(jié)果封裝

    這篇文章主要介紹了SpringMVC中的表現(xiàn)層結(jié)果封裝,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java中的CopyOnWriteArrayList容器解析

    Java中的CopyOnWriteArrayList容器解析

    這篇文章主要介紹了Java中的CopyOnWriteArrayList容器解析,CopyOnWriteArrayList容器允許并發(fā)讀,讀操作是無鎖的,性能較高。至于寫操作,比如向容器中添加一個元素,則首先將當前容器復(fù)制一份,然后在新副本上執(zhí)行寫操作,需要的朋友可以參考下
    2023-12-12
  • java遠程調(diào)用接口、URL的方式代碼

    java遠程調(diào)用接口、URL的方式代碼

    我們都知道接口有自己本地的,也有遠程別人寫好的,而調(diào)用遠程接口的就需要使用遠程調(diào)用啦,這篇文章主要給大家介紹了關(guān)于java遠程調(diào)用接口、URL的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Java?Stream實現(xiàn)多字段分組groupingBy操作詳解

    Java?Stream實現(xiàn)多字段分組groupingBy操作詳解

    Stream是Java8的一個新特性,主要用戶集合數(shù)據(jù)的處理,如排序、過濾、去重等等功能,本文就來講講如何利用Stream實現(xiàn)比較優(yōu)雅的按多字段進行分組groupingBy吧
    2023-06-06
  • MybatisPlus?BaseMapper?實現(xiàn)對數(shù)據(jù)庫增刪改查源碼

    MybatisPlus?BaseMapper?實現(xiàn)對數(shù)據(jù)庫增刪改查源碼

    MybatisPlus?是一款在?Mybatis?基礎(chǔ)上進行的增強?orm?框架,可以實現(xiàn)不寫?sql?就完成數(shù)據(jù)庫相關(guān)的操作,這篇文章主要介紹了MybatisPlus?BaseMapper?實現(xiàn)對數(shù)據(jù)庫增刪改查源碼解析,需要的朋友可以參考下
    2023-01-01

最新評論