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

Sa-Token中的SaSession對象使用學習示例詳解

 更新時間:2023年07月18日 11:06:51   作者:省長[機智]  
這篇文章主要為大家介紹了Sa-Token中的SaSession對象使用學習示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

Sa-Token 是一個輕量級 java 權限認證框架,主要解決登錄認證、權限認證、單點登錄、OAuth2、微服務網(wǎng)關鑒權 等一系列權限相關問題。

Gitee 開源地址:https://gitee.com/dromara/sa-token

本文將詳細介紹 Sa-Token 中的不同 SaSession 對象的區(qū)別,以及各種方便的存取值的方法。

一、Session 是什么?

Session 是會話中專業(yè)的數(shù)據(jù)緩存組件,通過 Session 我們可以很方便的緩存一些高頻讀寫數(shù)據(jù),提高程序性能,例如:

// 在登錄時緩存user對象 
StpUtil.getSession().set("user", user);
// 然后我們就可以在任意處使用這個user對象
SysUser user = (SysUser) StpUtil.getSession().get("user");

在 Sa-Token 中,SaSession 分為三種,分別是:

  • User-Session: 指的是框架為每個 賬號id 分配的 SaSession。
  • Token-Session: 指的是框架為每個 token 分配的 SaSession。
  • Custom-Session: 指的是以一個 特定的值 作為SessionId,來分配的 Session。

假設三個客戶端登錄同一賬號,且配置了不共享token,那么此時的Session模型是:

簡而言之:

  • User-Session 以UserId為主,只要token指向的UserId一致,那么對應的Session對象就一致。
  • Token-Session 以token為主,只要token不同,那么對應的Session對象就不同。
  • Custom-Session 以特定的key為主,不同key對應不同的Session對象,同樣的key指向同一個Session對象。

二、獲取 User-Session

有關賬號Session的API如下:

// 獲取當前賬號id的Session (必須是登錄后才能調(diào)用)
StpUtil.getSession();
// 獲取當前賬號id的Session, 并決定在Session尚未創(chuàng)建時,是否新建并返回
StpUtil.getSession(true);
// 獲取賬號id為10001的Session
StpUtil.getSessionByLoginId(10001);
// 獲取賬號id為10001的Session, 并決定在Session尚未創(chuàng)建時,是否新建并返回
StpUtil.getSessionByLoginId(10001, true);
// 獲取SessionId為xxxx-xxxx的Session, 在Session尚未創(chuàng)建時, 返回null 
StpUtil.getSessionBySessionId("xxxx-xxxx");

三、獲取 Token-Session

有關令牌Session的API如下:

// 獲取當前 Token 的 Token-Session 對象
StpUtil.getTokenSession();
// 獲取指定 Token 的 Token-Session 對象
StpUtil.getTokenSessionByToken(token);

四、獲取自定義Session

自定義Session指的是以一個特定的值作為SessionId來分配的Session, 借助自定義Session,你可以為系統(tǒng)中的任意元素分配相應的session

例如以商品id作為key為每個商品分配一個Session,以便于緩存和商品相關的數(shù)據(jù),其相關API如下:

// 查詢指定key的Session是否存在
SaSessionCustomUtil.isExists("goods-10001");
// 獲取指定key的Session,如果沒有,則新建并返回
SaSessionCustomUtil.getSessionById("goods-10001");
// 獲取指定key的Session,如果沒有,第二個參數(shù)決定是否新建并返回  
SaSessionCustomUtil.getSessionById("goods-10001", false);   
// 刪除指定key的Session
SaSessionCustomUtil.deleteSessionById("goods-10001");

五、在 Session 上存取值

// 寫值 
session.set("name", "zhang"); 
// 寫值 (只有在此key原本無值的時候才會寫入)
session.setDefaultValue("name", "zhang");
// 取值
session.get("name");
// 取值 (指定默認值)
session.get("name", "<defaultValue>"); 
// 取值 (若無值則執(zhí)行參數(shù)方法, 之后將結果保存到此鍵名下,并返回此結果   若有值則直接返回, 無需執(zhí)行參數(shù)方法)
session.get("name", () -> {
            return ...;
        });
// ---------- 數(shù)據(jù)類型轉換: ----------
session.getInt("age");         // 取值 (轉int類型)
session.getLong("age");        // 取值 (轉long類型)
session.getString("name");     // 取值 (轉String類型)
session.getDouble("result");   // 取值 (轉double類型)
session.getFloat("result");    // 取值 (轉float類型)
session.getModel("key", Student.class);     // 取值 (指定轉換類型)
session.getModel("key", Student.class, <defaultValue>);  // 取值 (指定轉換類型, 并指定值為Null時返回的默認值)
// 是否含有某個key (返回true或false)
session.has("key"); 
// 刪值 
session.delete('name');          
// 清空所有值 
session.clear();                 
// 獲取此 Session 的所有key (返回Set<String>)
session.keys();

六、其它操作

// 返回此 Session 的id 
session.getId();                          
// 返回此 Session 的創(chuàng)建時間 (時間戳) 
session.getCreateTime();                  
// 返回此 Session 會話上的底層數(shù)據(jù)對象(如果更新map里的值,請調(diào)用session.update()方法避免產(chǎn)生臟數(shù)據(jù))
session.getDataMap();                     
// 將這個 Session 從持久庫更新一下
session.update();                         
// 注銷此 Session 會話 (從持久庫刪除此Session)
session.logout();

七、SaSession 環(huán)境隔離說明

有同學經(jīng)常會把 SaSession 與 HttpSession 進行混淆,例如:

@PostMapping("/resetPoints")
public void reset(HttpSession session) {
    // 在 HttpSession 上寫入一個值 
    session.setAttribute("name", 66);
    // 在 SaSession 進行取值
    System.out.println(StpUtil.getSession().get("name"));    // 輸出null
}

要點:

  • SaSession 與 HttpSession 沒有任何關系,在HttpSession上寫入的值,在SaSession中無法取出。
  • HttpSession并未被框架接管,在使用Sa-Token時,請在任何情況下均使用SaSession,不要使用HttpSession。

八、未登錄場景下獲取 Token-Session

默認場景下,只有登錄后才能通過 StpUtil.getTokenSession() 獲取 Token-Session。

如果想要在未登錄場景下獲取 Token-Session ,有兩種方法:

  • 方法一:將全局配置項 tokenSessionCheckLogin 改為 false。
  • 方法二:使用匿名 Token-Session
// 獲取當前 Token 的匿名 Token-Session (可在未登錄情況下使用的 Token-Session)
StpUtil.getAnonTokenSession();

注意點:如果前端沒有提交 Token ,或者提交的 Token 是一個無效 Token 的話,框架將不會根據(jù)此 Token 創(chuàng)建 Token-Session 對象,而是隨機一個新的 Token 值來創(chuàng)建 Token-Session 對象,此 Token 值可以通過 StpUtil.getTokenValue() 獲取到。

參考資料

以上就是Sa-Token中的SaSession對象使用學習示例詳解的詳細內(nèi)容,更多關于Sa-Token SaSession對象的資料請關注腳本之家其它相關文章!

相關文章

  • java并發(fā)等待條件的實現(xiàn)原理詳解

    java并發(fā)等待條件的實現(xiàn)原理詳解

    這篇文章主要介紹了java并發(fā)等待條件的實現(xiàn)原理詳解,還是比較不錯的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • Maven多模塊及version修改的實現(xiàn)方法

    Maven多模塊及version修改的實現(xiàn)方法

    這篇文章主要介紹了Maven多模塊及version修改的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • 使用JAXBContext 設置xml節(jié)點屬性

    使用JAXBContext 設置xml節(jié)點屬性

    這篇文章主要介紹了使用JAXBContext 設置xml節(jié)點屬性的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring中的@Aspect注解使用詳解

    Spring中的@Aspect注解使用詳解

    這篇文章主要介紹了Spring中的@Aspect注解使用詳解,利用AOP可以對業(yè)務邏輯的各個部分進行隔離,從而使得業(yè)務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率,需要的朋友可以參考下
    2024-01-01
  • springboot配置Jackson返回統(tǒng)一默認值的實現(xiàn)示例

    springboot配置Jackson返回統(tǒng)一默認值的實現(xiàn)示例

    在項目開發(fā)中,我們返回的數(shù)據(jù)或者對象沒有的時候一般直接返回的null,那么如何返回統(tǒng)一默認值,感興趣的可以了解一下
    2021-07-07
  • Junit寫法及與spring整合過程詳解

    Junit寫法及與spring整合過程詳解

    這篇文章主要介紹了Junit寫法及與spring整合過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • 淺析JDBC的使用方法

    淺析JDBC的使用方法

    這篇文章主要介紹了JDBC的使用方法,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-08-08
  • mybaits-plus?lambdaQuery()?和?lambdaUpdate()?常見的使用方法

    mybaits-plus?lambdaQuery()?和?lambdaUpdate()?常見的使用方法

    MyBatis-Plus是一個?MyBatis?(opens?new?window)的增強工具,在?MyBatis?的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生,這篇文章主要介紹了mybaits-plus?lambdaQuery()?和?lambdaUpdate()?比較常見的使用方法,需要的朋友可以參考下
    2023-01-01
  • SpringBoot使用WebJars統(tǒng)一管理靜態(tài)資源的方法

    SpringBoot使用WebJars統(tǒng)一管理靜態(tài)資源的方法

    這篇文章主要介紹了SpringBoot使用WebJars統(tǒng)一管理靜態(tài)資源的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解

    JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解

    這篇文章主要介紹了JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解,CountDownLatch 類可以設置一個計數(shù)器,然后通過 countDown 方法來進行 減 1 的操作,使用 await 方法等待計數(shù)器不大于 0,然后繼續(xù)執(zhí)行 await 方法 之后的語句,需要的朋友可以參考下
    2024-01-01

最新評論