diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java index 1e4b8ffa..c8060c57 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java @@ -891,7 +891,7 @@ public class StpLogic { } /** - * 获取指定loginId的tokenValue + * 获取指定loginId指定设备端的tokenValue *

在配置为允许并发登录时,此方法只会返回队列的最后一个token, * 如果你需要返回此账号id的所有token,请调用 getTokenValueListByLoginId * @param loginId 账号id @@ -913,7 +913,7 @@ public class StpLogic { } /** - * 获取指定loginId的tokenValue集合 + * 获取指定loginId指定设备端的tokenValue 集合 * @param loginId 账号id * @param device 设备标识 * @return 此loginId的所有相关token diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java index d9e8490f..786f3ad8 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java @@ -402,7 +402,7 @@ public class StpUtil { } /** - * 获取指定loginId的tokenValue + * 获取指定loginId指定设备端的tokenValue *

在配置为允许并发登录时,此方法只会返回队列的最后一个token, * 如果你需要返回此账号id的所有token,请调用 getTokenValueListByLoginId * @param loginId 账号id @@ -423,7 +423,7 @@ public class StpUtil { } /** - * 获取指定loginId的tokenValue集合 + * 获取指定loginId指定设备端的tokenValue集合 * @param loginId 账号id * @param device 设备标识 * @return 此loginId的所有相关token diff --git a/sa-token-doc/doc/_sidebar.md b/sa-token-doc/doc/_sidebar.md index f0db84c1..e76e2dce 100644 --- a/sa-token-doc/doc/_sidebar.md +++ b/sa-token-doc/doc/_sidebar.md @@ -14,6 +14,7 @@ - [无Cookie模式(前后台分离)](/use/not-cookie) - [模拟他人](/use/mock-person) - [多账号验证](/use/many-account) + - [同端互斥登录](/use/mutex-login) - [注解式鉴权](/use/at-check) - [花式token](/use/token-style) - [框架配置](/use/config) diff --git a/sa-token-doc/doc/use/mutex-login.md b/sa-token-doc/doc/use/mutex-login.md new file mode 100644 index 00000000..fa87080a --- /dev/null +++ b/sa-token-doc/doc/use/mutex-login.md @@ -0,0 +1,39 @@ +# 同端互斥登录 + +如果你经常使用腾讯QQ,就会发现它的登录有如下特点:它可以手机电脑同时在线,但是不能在两个手机上同时登录一个账号
+同端互斥登录,指的就是像腾讯QQ一样,在同一类型设备上只允许单地点登录,在不同类型设备上允许同时在线 + +--- + +## 具体API + +在`sa-token`中如何做到同端互斥登录?
+首先在配置文件中,将 `allowConcurrentLogin` 配置为false,然后调用登录等相关接口时声明设备标识即可: + + +#### 指定设备标识登录 +``` java +StpUtil.setLoginId(10001, "PC"); // 指定`账号id`和`设备标识`进行登录 +``` +调用此方法登录后,同设备的会被顶下线(不同设备不受影响),再次访问系统时会抛出 `NotLoginException` 异常,场景值=`-4` + + +#### 指定设备标识强制注销 +``` java +StpUtil.logoutByLoginId(10001, "PC"); // 指定`账号id`和`设备标识`进行强制注销 (踢人下线) +``` +如果第二个参数填写null或不填,代表将这个账号id所有在线端踢下线,被踢出者再次访问系统时会抛出 `NotLoginException` 异常,场景值=`-5` + + +#### 查询当前登录的设备标识 +``` java +StpUtil.getLoginDevice(); // 指返回当前token的登录设备 +``` + + +#### id反查token +``` java +StpUtil.getTokenValueByLoginId(10001, "APP"); // 获取指定loginId指定设备端的tokenValue +``` + +