国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一文詳解 Sa-Token 中的 SaSession 對(duì)象

這篇具有很好參考價(jià)值的文章主要介紹了一文詳解 Sa-Token 中的 SaSession 對(duì)象。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Sa-Token 是一個(gè)輕量級(jí) java 權(quán)限認(rèn)證框架,主要解決登錄認(rèn)證、權(quán)限認(rèn)證、單點(diǎn)登錄、OAuth2、微服務(wù)網(wǎng)關(guān)鑒權(quán) 等一系列權(quán)限相關(guān)問題。

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

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

一、Session 是什么?

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

// 在登錄時(shí)緩存user對(duì)象 
StpUtil.getSession().set("user", user);

// 然后我們就可以在任意處使用這個(gè)user對(duì)象
SysUser user = (SysUser) StpUtil.getSession().get("user");

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

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

假設(shè)三個(gè)客戶端登錄同一賬號(hào),且配置了不共享token,那么此時(shí)的Session模型是:

簡(jiǎn)而言之:

  • User-Session 以UserId為主,只要token指向的UserId一致,那么對(duì)應(yīng)的Session對(duì)象就一致。
  • Token-Session 以token為主,只要token不同,那么對(duì)應(yīng)的Session對(duì)象就不同。
  • Custom-Session 以特定的key為主,不同key對(duì)應(yīng)不同的Session對(duì)象,同樣的key指向同一個(gè)Session對(duì)象。

二、獲取 User-Session

有關(guān)賬號(hào)Session的API如下:

// 獲取當(dāng)前賬號(hào)id的Session (必須是登錄后才能調(diào)用)
StpUtil.getSession();

// 獲取當(dāng)前賬號(hào)id的Session, 并決定在Session尚未創(chuàng)建時(shí),是否新建并返回
StpUtil.getSession(true);

// 獲取賬號(hào)id為10001的Session
StpUtil.getSessionByLoginId(10001);

// 獲取賬號(hào)id為10001的Session, 并決定在Session尚未創(chuàng)建時(shí),是否新建并返回
StpUtil.getSessionByLoginId(10001, true);

// 獲取SessionId為xxxx-xxxx的Session, 在Session尚未創(chuàng)建時(shí), 返回null 
StpUtil.getSessionBySessionId("xxxx-xxxx");

三、獲取 Token-Session

有關(guān)令牌Session的API如下:

// 獲取當(dāng)前 Token 的 Token-Session 對(duì)象
StpUtil.getTokenSession();

// 獲取指定 Token 的 Token-Session 對(duì)象
StpUtil.getTokenSessionByToken(token);

四、獲取自定義Session

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

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

// 查詢指定key的Session是否存在
SaSessionCustomUtil.isExists("goods-10001");

// 獲取指定key的Session,如果沒有,則新建并返回
SaSessionCustomUtil.getSessionById("goods-10001");

// 獲取指定key的Session,如果沒有,第二個(gè)參數(shù)決定是否新建并返回  
SaSessionCustomUtil.getSessionById("goods-10001", false);   

// 刪除指定key的Session
SaSessionCustomUtil.deleteSessionById("goods-10001");

五、在 Session 上存取值

// 寫值 
session.set("name", "zhang"); 

// 寫值 (只有在此key原本無值的時(shí)候才會(huì)寫入)
session.setDefaultValue("name", "zhang");

// 取值
session.get("name");

// 取值 (指定默認(rèn)值)
session.get("name", "<defaultValue>"); 

// 取值 (若無值則執(zhí)行參數(shù)方法, 之后將結(jié)果保存到此鍵名下,并返回此結(jié)果   若有值則直接返回, 無需執(zhí)行參數(shù)方法)
session.get("name", () -> {
            return ...;
        });

// ---------- 數(shù)據(jù)類型轉(zhuǎn)換: ----------
session.getInt("age");         // 取值 (轉(zhuǎn)int類型)
session.getLong("age");        // 取值 (轉(zhuǎn)long類型)
session.getString("name");     // 取值 (轉(zhuǎn)String類型)
session.getDouble("result");   // 取值 (轉(zhuǎn)double類型)
session.getFloat("result");    // 取值 (轉(zhuǎn)float類型)
session.getModel("key", Student.class);     // 取值 (指定轉(zhuǎn)換類型)
session.getModel("key", Student.class, <defaultValue>);  // 取值 (指定轉(zhuǎn)換類型, 并指定值為Null時(shí)返回的默認(rèn)值)

// 是否含有某個(gè)key (返回true或false)
session.has("key"); 

// 刪值 
session.delete('name');          

// 清空所有值 
session.clear();                 

// 獲取此 Session 的所有key (返回Set<String>)
session.keys();      

六、其它操作

// 返回此 Session 的id 
session.getId();                          

// 返回此 Session 的創(chuàng)建時(shí)間 (時(shí)間戳) 
session.getCreateTime();                  

// 返回此 Session 會(huì)話上的底層數(shù)據(jù)對(duì)象(如果更新map里的值,請(qǐng)調(diào)用session.update()方法避免產(chǎn)生臟數(shù)據(jù))
session.getDataMap();                     

// 將這個(gè) Session 從持久庫(kù)更新一下
session.update();                         

// 注銷此 Session 會(huì)話 (從持久庫(kù)刪除此Session)
session.logout();                         

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

有同學(xué)經(jīng)常會(huì)把 SaSessionHttpSession 進(jìn)行混淆,例如:

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

要點(diǎn):

  1. SaSessionHttpSession 沒有任何關(guān)系,在HttpSession上寫入的值,在SaSession中無法取出。
  2. HttpSession并未被框架接管,在使用Sa-Token時(shí),請(qǐng)?jiān)谌魏吻闆r下均使用SaSession,不要使用HttpSession。

八、未登錄場(chǎng)景下獲取 Token-Session

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

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

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

注意點(diǎn):如果前端沒有提交 Token ,或者提交的 Token 是一個(gè)無效 Token 的話,框架將不會(huì)根據(jù)此 Token 創(chuàng)建 Token-Session 對(duì)象,
而是隨機(jī)一個(gè)新的 Token 值來創(chuàng)建 Token-Session 對(duì)象,此 Token 值可以通過 StpUtil.getTokenValue() 獲取到。文章來源地址http://www.zghlxwxcb.cn/news/detail-464514.html


參考資料

  • Sa-Token 文檔:https://sa-token.cc
  • Gitee 倉(cāng)庫(kù)地址:https://gitee.com/dromara/sa-token
  • GitHub 倉(cāng)庫(kù)地址:https://github.com/dromara/sa-token

到了這里,關(guān)于一文詳解 Sa-Token 中的 SaSession 對(duì)象的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Sa-Token源碼簡(jiǎn)單閱讀

    Sa-Token源碼簡(jiǎn)單閱讀

    一.權(quán)限登錄模塊包括幾個(gè)基本子模塊: 1.登錄。 實(shí)現(xiàn)方式大致為:先檢驗(yàn)用戶名密碼是否正確,如正確則在 緩存 中存入用戶信息(一般必須要有用戶標(biāo)識(shí)和訪問token,或再加一些附加信息如用戶的角色權(quán)限),再返回訪問token給客戶端。 2.過濾器,主要通過客戶端訪問時(shí)帶

    2023年04月26日
    瀏覽(24)
  • mall :sa-token項(xiàng)目源碼解析

    mall :sa-token項(xiàng)目源碼解析

    目錄 一、mall開源項(xiàng)目 1.1 來源 1.2 項(xiàng)目轉(zhuǎn)移 1.3 項(xiàng)目克隆 二、Sa-Toekn框架 2.1 Sa-Token 簡(jiǎn)介 2.2 分布式后端項(xiàng)目的使用流程 2.3 分布式后端項(xiàng)目的使用場(chǎng)景 三、源碼解析 3.1 集成與配置 3.1.1 導(dǎo)入依賴 3.1.2 添加配置 3.1.3 異常處理 3.1.4 存儲(chǔ)用戶信息 3.2 登錄認(rèn)證 3.2.1 配置黑白名單

    2024年02月12日
    瀏覽(18)
  • SpringBoot 使用 Sa-Token 完成權(quán)限認(rèn)證

    所謂權(quán)限認(rèn)證,核心邏輯就是判斷一個(gè)賬號(hào)是否擁有指定權(quán)限: 有,就讓你通過。 沒有?那么禁止訪問! 深入到底層數(shù)據(jù)中,就是每個(gè)賬號(hào)都會(huì)擁有一個(gè)權(quán)限碼集合,框架來校驗(yàn)這個(gè)集合中是否包含指定的權(quán)限碼。 例如:當(dāng)前賬號(hào)擁有權(quán)限碼集合 [\\\"user-add\\\", \\\"user-delete\\\", \\\"us

    2023年04月25日
    瀏覽(21)
  • 使用 Sa-Token 完成踢人下線功能

    在企業(yè)級(jí)項(xiàng)目中,踢人下線是一個(gè)很常見的需求,如果要設(shè)計(jì)比較完善的話,至少需要以下功能點(diǎn): 可以根據(jù)用戶 userId 踢出指定會(huì)話,對(duì)方再次訪問系統(tǒng)會(huì)被提示:您已被踢下線,請(qǐng)重新登錄。 可以查詢出一個(gè)賬號(hào)共在幾個(gè)設(shè)備端登錄,并返回其對(duì)應(yīng)的 Token 憑證,以便后

    2024年02月03日
    瀏覽(23)
  • SpringBoot 使用 Sa-Token 完成路由攔截鑒權(quán)

    在前文,我們?cè)敿?xì)的講述了在 Sa-Token 如何使用注解進(jìn)行權(quán)限認(rèn)證,注解鑒權(quán)雖然方便,卻并不適合所有鑒權(quán)場(chǎng)景。 假設(shè)有如下需求:項(xiàng)目中所有接口均需要登錄認(rèn)證校驗(yàn),只有 “登錄接口” 本身對(duì)外開放。 如果我們對(duì)項(xiàng)目所有接口都加上 @SaCheckLogin 注解,會(huì)顯得非常冗余

    2024年02月05日
    瀏覽(23)
  • 前后端分離架構(gòu)下使用 Sa-Token 完成登錄認(rèn)證

    目前絕大多數(shù)系統(tǒng)都已經(jīng)采用 “前后端分離” 架構(gòu)來設(shè)計(jì)了,傳統(tǒng)的Session模式鑒權(quán)也不再適合這種架構(gòu)(或者需要額外寫很多的代碼來專門適配)。 Sa-Token 是一個(gè) java 輕量級(jí)權(quán)限認(rèn)證框架,專為前后端分離架構(gòu)打造,主要解決登錄認(rèn)證、權(quán)限認(rèn)證、單點(diǎn)登錄、OAuth2、微服務(wù)

    2024年02月07日
    瀏覽(76)
  • SpringBoot 使用 Sa-Token 完成注解鑒權(quán)功能

    注解鑒權(quán) —— 優(yōu)雅的將鑒權(quán)與業(yè)務(wù)代碼分離。本篇我們將介紹在 Sa-Token 中如何通過注解完成權(quán)限校驗(yàn)。 Sa-Token 是一個(gè)輕量級(jí) java 權(quán)限認(rèn)證框架,主要解決登錄認(rèn)證、權(quán)限認(rèn)證、單點(diǎn)登錄、OAuth2、微服務(wù)網(wǎng)關(guān)鑒權(quán) 等一系列權(quán)限相關(guān)問題。 Gitee 開源地址:https://gitee.com/dromar

    2024年02月04日
    瀏覽(18)
  • Spring Gateway、Sa-Token、nacos完成認(rèn)證/鑒權(quán)

    Spring Gateway、Sa-Token、nacos完成認(rèn)證/鑒權(quán)

    之前進(jìn)行鑒權(quán)、授權(quán)都要寫一大堆代碼。如果使用像Spring Security這樣的框架,又要花好多時(shí)間學(xué)習(xí),拿過來一用,好多配置項(xiàng)也不知道是干嘛用的,又不想了解。要是不用Spring Security,token的生成、校驗(yàn)、刷新,權(quán)限的驗(yàn)證分配,又全要自己寫,想想都頭大。 Spring Security太重

    2024年02月09日
    瀏覽(23)
  • spring boot +Sa-Token優(yōu)雅的實(shí)現(xiàn)項(xiàng)目鑒權(quán)!

    spring boot +Sa-Token優(yōu)雅的實(shí)現(xiàn)項(xiàng)目鑒權(quán)!

    最近在做登錄、授權(quán)的功能,一開始考慮到的是spring boot + spring security,但spring security太重,而我們是輕量級(jí)的項(xiàng)目,所以,spring security不適合我們。 而后考慮spring boot + shiro,但shiro自帶的aop會(huì)影響spring boot的aop,所以,shiro也不適合我們。 后來瀏覽github時(shí),發(fā)現(xiàn)Sa-Token這個(gè)框

    2024年02月06日
    瀏覽(20)
  • 使用 Sa-Token 實(shí)現(xiàn) [記住我] 模式登錄、七天免登錄

    如圖所示,一般網(wǎng)站的登錄界面都會(huì)有一個(gè) [記住我] 按鈕,當(dāng)你勾選它登錄后,即使你關(guān)閉瀏覽器再次打開網(wǎng)站,也依然會(huì)處于登錄狀態(tài),無須重復(fù)驗(yàn)證密碼: 本文將詳細(xì)介紹在 Sa-Token中,如何做到以下登錄模式: 記住我登錄:登錄后關(guān)閉瀏覽器,再次打開網(wǎng)站登錄狀態(tài)依

    2024年02月09日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包