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

Sa-Token不同模式實現(xiàn)單地登錄?多地登錄?同端互斥登錄

 更新時間:2023年07月18日 10:42:49   作者:省長[機(jī)智]  
這篇文章主要為大家介紹了Sa-Token不同模式實現(xiàn)單地登錄?多地登錄?同端互斥登錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、需求分析

如果你經(jīng)常使用騰訊QQ,就會發(fā)現(xiàn)它的登錄有如下特點:它可以手機(jī)電腦同時在線,但是不能在兩個手機(jī)上同時登錄一個賬號。

同端互斥登錄,指的就是:像騰訊QQ一樣,在同一類型設(shè)備上只允許單地點登錄,在不同類型設(shè)備上允許同時在線。

動態(tài)演示圖:

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

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

本文將介紹在 Sa-Token 中,如何實現(xiàn)以下登錄策略:

  • 單地登錄:指一個賬號同一時間只能在一個地方登錄,新登錄會擠掉舊登錄,也可以叫:單端登錄。
  • 多地登錄:指一個賬號同一時間可以在不同地方登錄,新登錄會和舊登錄共存,也可以叫:多端登錄。
  • 同端互斥登錄:在同一類型設(shè)備上只允許單地點登錄,在不同類型設(shè)備上允許同時在線,參考騰訊QQ的登錄模式:手機(jī)和電腦可以同時在線,但不能兩個手機(jī)同時在線。

與之對應(yīng)的,注銷策略也將分為以下幾種:

  • 單端注銷:只在調(diào)用退出的一端注銷。
  • 全端注銷:一端注銷,全端下線。
  • 同端注銷:例如將所有手機(jī)端注銷下線,PC端不受影響。

二、多地登錄

此模式較為簡單,Sa-Token 默認(rèn)模式即為多地登錄模式。

1、首先引入 Sa-Token 依賴:

<!-- Sa-Token 權(quán)限認(rèn)證 -->
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.34.0</version>
</dependency>

注:如果你使用的是 SpringBoot 3.x,只需要將 sa-token-spring-boot-starter 修改為 sa-token-spring-boot3-starter 即可。

2、在用戶登錄時將賬號id寫入會話中

@RestController
@RequestMapping("/user/")
public class UserController {
    @RequestMapping("doLogin")
    public SaResult doLogin(String username, String password) {
        // 此處僅作示例模擬,真實項目需要從數(shù)據(jù)庫中查詢數(shù)據(jù)進(jìn)行比對 
        if("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            return SaResult.ok("登錄成功");
        }
        return SaResult.ok("登錄失敗");
    }
}

啟動類:

@SpringBootApplication
public class SaTokenDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SaTokenDemoApplication.class, args); 
        System.out.println("\n啟動成功:Sa-Roken 配置如下:" + SaManager.getConfig());
    }
}

如上代碼,在多人登錄同一賬號時將不會對舊會話做任何處理,同一賬號可以在多個地點任意登錄,互不影響。

3、如果要全端注銷,可以調(diào)用 logout 方法:

// 會話注銷
@RequestMapping("logout")
public SaResult logout() {
    StpUtil.logout();
    return SaResult.ok("退出登錄成功");
}

調(diào)用如上方法注銷后,當(dāng)前賬號所有端將一起下線。

4、單端注銷

如果要只注銷一端,可將配置文件中 is-share 的值配置為 false

sa-token:
    is-share: false

此配置項的含義為:在多人登錄同一賬號時,是否共用一個 Token。

  • 為 true 時:所有登錄共用一個 Token。
  • 為 false 時:每次登錄新建一個 Token。

此值為 false 后,每次登錄都將返回不同的 Token,與之對應(yīng)的,調(diào)用 StpUtil.logout() 也只會注銷掉當(dāng)前的 Token,其他端不受影響。

三、單地登錄

單地登錄的重點是需要改一下 yml 配置文件:

sa-token: 
    is-concurrent: false

is-concurrent 的含義為是否允許同一賬號并發(fā)登錄:

  • 為 true 時:允許一起登錄。
  • 為 false 時:新登錄擠掉舊登錄。

其它代碼與 [多地登錄] 無異,當(dāng)我們在兩個瀏覽器分別登錄同一賬號時,舊會話再次訪問系統(tǒng)將會得到如下提示:

{
    "code": 401,
    "msg": "Token 已被頂下線",
    "data": null
}

在 單地登錄 模式中,不存在注銷策略的問題,因為同一時間內(nèi),一個賬號最多在一個設(shè)備在線,只要調(diào)用注銷,就必然是全端下線。

四、同端互斥登錄

好了,終于輪到主角出場,同端互斥登錄可以讓我們像騰訊QQ一樣,在同一類型設(shè)備上只允許單地點登錄,在不同類型設(shè)備上允許同時在線。

那么在 Sa-Token 中如何做到同端互斥登錄呢?

首先如 單地登錄一樣,在配置文件中,將 sa-token.is-concurrent 配置為false,然后調(diào)用登錄等相關(guān)接口時聲明設(shè)備標(biāo)識即可:

1、指定設(shè)備標(biāo)識登錄

StpUtil.login(10001, "PC");

調(diào)用此方法登錄后,同設(shè)備的會被頂下線(不同設(shè)備不受影響),再次訪問系統(tǒng)時會拋出 NotLoginException 異常,場景值=-4

場景值對應(yīng)常量含義說明
-1NotLoginException.NOT_TOKEN未能從請求中讀取到 Token
-2NotLoginException.INVALID_TOKEN已讀取到 Token,但是 Token無效
-3NotLoginException.TOKEN_TIMEOUT已讀取到 Token,但是 Token已經(jīng)過期
-4NotLoginException.BE_REPLACED已讀取到 Token,但是 Token 已被頂下線
-5NotLoginException.KICK_OUT已讀取到 Token,但是 Token 已被踢下線

如果第二個參數(shù)填寫null或不填,代表將這個賬號id所有在線端踢下線,被踢出者再次訪問系統(tǒng)時會拋出 NotLoginException 異常,場景值=-5

2、查詢當(dāng)前登錄的設(shè)備標(biāo)識

StpUtil.getLoginDevice();

如果在登錄時未指定設(shè)備類型值,調(diào)用此方法將返回默認(rèn)值:default-device。

3、指定設(shè)備端類型下線

業(yè)務(wù)場景舉例:在手機(jī)端控制PC端下線(手機(jī)端本身不受影響)

StpUtil.logout(10001, "PC");

4、全端下線

在調(diào)用 logout 方法時,不填寫具體的設(shè)備端類型,將默認(rèn)控制所有端一起下線。

StpUtil.logout(10001);

以上就是 Sa-Token 框架在處理登錄問題時的各種方案,可以看出不管是簡單的多地登錄還是復(fù)雜的同端互斥登錄,在 Sa-Token 都有完善的解決方案。

參考資料

以上就是Sa-Token不同模式實現(xiàn)單地登錄 多地登錄 同端互斥登錄的詳細(xì)內(nèi)容,更多關(guān)于Sa-Token登錄模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • elasticsearch插件開發(fā)教程

    elasticsearch插件開發(fā)教程

    這篇文章主要為大家詳細(xì)介紹了elasticsearch插件開發(fā)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 初識Java設(shè)計模式適配器模式

    初識Java設(shè)計模式適配器模式

    這篇文章主要為大家詳細(xì)介紹了Java設(shè)計模式適配器模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 關(guān)于Spring的AnnotationAwareAspectJAutoProxyCreator類解析

    關(guān)于Spring的AnnotationAwareAspectJAutoProxyCreator類解析

    這篇文章主要介紹了關(guān)于Spring的AnnotationAwareAspectJAutoProxyCreator類解析,Spring是一個開源免費的框架 , 容器,是一個輕量級的框架 ,需要的朋友可以參考下
    2023-05-05
  • java實現(xiàn)文件變化監(jiān)控的方法(推薦)

    java實現(xiàn)文件變化監(jiān)控的方法(推薦)

    下面小編就為大家?guī)硪黄猨ava實現(xiàn)文件變化監(jiān)控的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • java以json格式向后臺服務(wù)器接口發(fā)送請求的實例

    java以json格式向后臺服務(wù)器接口發(fā)送請求的實例

    下面小編就為大家分享一篇java以json格式向后臺服務(wù)器接口發(fā)送請求的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • mybatis注解如何實現(xiàn)對象批量更改

    mybatis注解如何實現(xiàn)對象批量更改

    這篇文章主要介紹了mybatis注解實現(xiàn)對象批量更改的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java實現(xiàn)圖片百葉窗效果(附源碼)

    Java實現(xiàn)圖片百葉窗效果(附源碼)

    在數(shù)字圖像處理領(lǐng)域,各種特效的實現(xiàn)不僅能夠提升圖片的美觀性,也能為后續(xù)的視頻合成、動畫制作提供基礎(chǔ)素材,使用 Java 語言結(jié)合 AWT/Swing 或 JavaFX,可以實現(xiàn)對圖像的像素級操作,以達(dá)到百葉窗特效,本文給大家介紹的非常詳細(xì),感興趣的小伙伴跟著小編一起來看看吧
    2025-05-05
  • Spring干預(yù)Bean的生命周期的方法詳解

    Spring干預(yù)Bean的生命周期的方法詳解

    Spring 提供了多種機(jī)制讓我們能夠在 Bean 生命周期的不同節(jié)點“插入”自己的邏輯,這些機(jī)制可以分為兩大類:針對單個 Bean 的干預(yù)和針對所有/多個 Bean 的全局干預(yù),本文將通過代碼示例給大家詳細(xì)的介紹一下,需要的朋友可以參考下
    2025-07-07
  • Spring?BeanDefinition父子關(guān)系示例解析

    Spring?BeanDefinition父子關(guān)系示例解析

    這篇文章主要為大家介紹了Spring?BeanDefinition父子關(guān)系示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Java定時任務(wù)ScheduledThreadPoolExecutor示例詳解

    Java定時任務(wù)ScheduledThreadPoolExecutor示例詳解

    這篇文章主要介紹了Java定時任務(wù)ScheduledThreadPoolExecutor示例詳解,這里使用scheduleAtFixedRate方法安排一個任務(wù),該任務(wù)是一個 Runnable 匿名類,其run方法中調(diào)用了new LoginViewTimeTask().loginStatisticsHandle()方法,需要的朋友可以參考下
    2023-11-11

最新評論

如皋市| 博罗县| 温泉县| 吉林市| 龙岩市| 科技| 江陵县| 贵溪市| 普陀区| 元朗区| 论坛| 梓潼县| 迁安市| 买车| 长汀县| 金川县| 隆子县| 桃园县| 鄂尔多斯市| 冕宁县| 新乐市| 临汾市| 惠安县| 六枝特区| 江陵县| 定日县| 巴青县| 灌阳县| 防城港市| 宜黄县| 章丘市| 建阳市| 松阳县| 德惠市| 南和县| 岫岩| 双鸭山市| 拉孜县| 合肥市| 新河县| 荣成市|