最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Sa-Token中的SaSession對(duì)象使用學(xué)習(xí)示例詳解

 更新時(shí)間:2023年07月18日 11:06:51   作者:省長(zhǎng)[機(jī)智]  
這篇文章主要為大家介紹了Sa-Token中的SaSession對(duì)象使用學(xué)習(xí)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jì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)問(wèn)題。

Gitee 開(kāi)源地址:https://gitee.com/dromara/sa-token

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

一、Session 是什么?

Session 是會(huì)話中專(zhuān)業(yè)的數(shù)據(jù)緩存組件,通過(guò) Session 我們可以很方便的緩存一些高頻讀寫(xiě)數(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,來(lái)分配的 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來(lái)分配的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,如果沒(méi)有,則新建并返回
SaSessionCustomUtil.getSessionById("goods-10001");
// 獲取指定key的Session,如果沒(méi)有,第二個(gè)參數(shù)決定是否新建并返回  
SaSessionCustomUtil.getSessionById("goods-10001", false);   
// 刪除指定key的Session
SaSessionCustomUtil.deleteSessionById("goods-10001");

五、在 Session 上存取值

// 寫(xiě)值 
session.set("name", "zhang"); 
// 寫(xiě)值 (只有在此key原本無(wú)值的時(shí)候才會(huì)寫(xiě)入)
session.setDefaultValue("name", "zhang");
// 取值
session.get("name");
// 取值 (指定默認(rèn)值)
session.get("name", "<defaultValue>"); 
// 取值 (若無(wú)值則執(zhí)行參數(shù)方法, 之后將結(jié)果保存到此鍵名下,并返回此結(jié)果   若有值則直接返回, 無(wú)需執(zhí)行參數(shù)方法)
session.get("name", () -> {
            return ...;
        });
// ---------- 數(shù)據(jù)類(lèi)型轉(zhuǎn)換: ----------
session.getInt("age");         // 取值 (轉(zhuǎn)int類(lèi)型)
session.getLong("age");        // 取值 (轉(zhuǎn)long類(lèi)型)
session.getString("name");     // 取值 (轉(zhuǎn)String類(lèi)型)
session.getDouble("result");   // 取值 (轉(zhuǎn)double類(lèi)型)
session.getFloat("result");    // 取值 (轉(zhuǎn)float類(lèi)型)
session.getModel("key", Student.class);     // 取值 (指定轉(zhuǎn)換類(lèi)型)
session.getModel("key", Student.class, <defaultValue>);  // 取值 (指定轉(zhuǎn)換類(lèi)型, 并指定值為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();                         
// 注銷(xiāo)此 Session 會(huì)話 (從持久庫(kù)刪除此Session)
session.logout();

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

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

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

要點(diǎn):

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

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

默認(rèn)場(chǎng)景下,只有登錄后才能通過(guò) 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):如果前端沒(méi)有提交 Token ,或者提交的 Token 是一個(gè)無(wú)效 Token 的話,框架將不會(huì)根據(jù)此 Token 創(chuàng)建 Token-Session 對(duì)象,而是隨機(jī)一個(gè)新的 Token 值來(lái)創(chuàng)建 Token-Session 對(duì)象,此 Token 值可以通過(guò) StpUtil.getTokenValue() 獲取到。

參考資料

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

相關(guān)文章

  • SpringDataJpa的@Query注解報(bào)錯(cuò)的解決

    SpringDataJpa的@Query注解報(bào)錯(cuò)的解決

    這篇文章主要介紹了SpringDataJpa的@Query注解報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳解基于redis實(shí)現(xiàn)分布式鎖

    詳解基于redis實(shí)現(xiàn)分布式鎖

    系統(tǒng)的不斷擴(kuò)大,分布式鎖是最基本的保障。與單機(jī)的多線程不一樣的是,分布式跨多個(gè)機(jī)器。線程的共享變量無(wú)法跨機(jī)器。本文將介紹基于redis實(shí)現(xiàn)分布式鎖。
    2021-06-06
  • Java8對(duì)List排序的方法大全

    Java8對(duì)List排序的方法大全

    這篇文章主要給大家介紹了關(guān)于Java8對(duì)List排序的方法大全,其實(shí)Java針對(duì)數(shù)組和List的排序都有實(shí)現(xiàn),文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • java身份證合法性校驗(yàn)并提取身份證有效信息

    java身份證合法性校驗(yàn)并提取身份證有效信息

    這篇文章主要為大家詳細(xì)介紹了java身份證合法性校驗(yàn),并獲取并根據(jù)身份證號(hào)提取身份證相關(guān)信息,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 解決FeignClient發(fā)送post請(qǐng)求異常的問(wèn)題

    解決FeignClient發(fā)送post請(qǐng)求異常的問(wèn)題

    這篇文章主要介紹了FeignClient發(fā)送post請(qǐng)求異常的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • redis分布式鎖的原理及代碼實(shí)例

    redis分布式鎖的原理及代碼實(shí)例

    這篇文章主要介紹了redis分布式鎖的原理及代碼實(shí)例,Redis作為一款高性能內(nèi)存數(shù)據(jù)庫(kù),其提供了一種非常實(shí)用的分布式鎖解決方案,可以幫助開(kāi)發(fā)人員輕松地實(shí)現(xiàn)分布式鎖功能,對(duì)于分布式系統(tǒng)的開(kāi)發(fā)和維護(hù),具有非常大的實(shí)用價(jià)值,需要的朋友可以參考下
    2024-01-01
  • 永久解決 Intellij idea 報(bào)錯(cuò):Error :java 不支持發(fā)行版本5的問(wèn)題

    永久解決 Intellij idea 報(bào)錯(cuò):Error :java 不支持發(fā)行版本5的問(wèn)題

    這篇文章主要介紹了永久解決 Intellij idea 報(bào)錯(cuò):Error :java 不支持發(fā)行版本5的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 基于Java實(shí)現(xiàn)五子棋小游戲(附源碼)

    基于Java實(shí)現(xiàn)五子棋小游戲(附源碼)

    這篇文章主要為大家介紹了如何通過(guò)Java實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java游戲開(kāi)發(fā)有一定幫助,需要的可以參考一下
    2022-11-11
  • Java concurrency集合之 CopyOnWriteArrayList_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency集合之 CopyOnWriteArrayList_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java concurrency集合之 CopyOnWriteArrayList的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • SpringBoot2.0整合tk.mybatis異常解決

    SpringBoot2.0整合tk.mybatis異常解決

    本文主要介紹了SpringBoot2.0整合tk.mybatis異常,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論

沈丘县| 白玉县| 三都| 贡山| 庄浪县| 石渠县| 收藏| 新田县| 武宣县| 遂昌县| 辽阳市| 长乐市| 商洛市| 友谊县| 德阳市| 博乐市| 新蔡县| 田林县| 阿巴嘎旗| 贺兰县| 南江县| 台湾省| 广饶县| 察隅县| 当阳市| 白水县| 山西省| 南开区| 玛多县| 石家庄市| 娄烦县| 阿巴嘎旗| 高尔夫| 南溪县| 临澧县| 辰溪县| 蛟河市| 涿鹿县| 冕宁县| 江源县| 沁源县|