From 210b92f3dc9e09908c4c24c3a3e1668f225fe4f1 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Sat, 23 Apr 2022 17:26:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=BA=90=E7=A0=81=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=EF=BC=8C=E6=9B=B4=E7=AC=A6=E5=90=88=E8=AF=AD=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- .../cn/dev33/satoken/session/SaSession.java | 2 +- .../cn/dev33/satoken/session/TokenSign.java | 6 +- .../cn/dev33/satoken/stp/SaLoginConfig.java | 2 +- .../cn/dev33/satoken/stp/SaLoginModel.java | 6 +- .../cn/dev33/satoken/stp/SaTokenInfo.java | 6 +- .../java/cn/dev33/satoken/stp/StpLogic.java | 38 +++++----- .../java/cn/dev33/satoken/stp/StpUtil.java | 38 +++++----- .../cn/dev33/satoken/util/SaTokenConsts.java | 2 +- .../main/java/com/pj/test/TestController.java | 4 +- .../java/com/pj/satoken/at/StpUserUtil.java | 70 +++++++++++++------ sa-token-doc/doc/README.md | 4 +- sa-token-doc/doc/fun/token-info.md | 2 +- sa-token-doc/doc/more/noun-intro.md | 2 +- sa-token-doc/doc/more/update-log.md | 2 +- sa-token-doc/doc/up/mutex-login.md | 16 ++--- sa-token-doc/doc/up/remember-me.md | 2 +- .../java/cn/dev33/satoken/jwt/SaJwtUtil.java | 6 +- .../dev33/satoken/jwt/StpLogicJwtForMix.java | 6 +- .../satoken/jwt/StpLogicJwtForStateless.java | 4 +- sa-token-plugin/sa-token-spring-aop/pom.xml | 2 +- .../test/java/com/pj/test/JwtForMixTest.java | 4 +- .../java/com/pj/test/JwtForStatelessTest.java | 4 +- .../java/com/pj/test/JwtForStyleTest.java | 2 +- .../src/test/java/com/pj/test/BasicsTest.java | 2 +- 25 files changed, 130 insertions(+), 106 deletions(-) diff --git a/README.md b/README.md index c8d5dbd6..0efaaddf 100644 --- a/README.md +++ b/README.md @@ -75,8 +75,8 @@ StpUtil.hasPermission("user:add"); // 查询当前账号是否含有指定权 StpUtil.getSession(); // 获取当前账号id的Session StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session StpUtil.getTokenValueByLoginId(10001); // 获取账号id为10001的token令牌值 -StpUtil.login(10001, "PC"); // 指定设备标识登录,常用于“同端互斥登录” -StpUtil.kickout(10001, "PC"); // 指定账号指定设备标识踢下线 (不同端不受影响) +StpUtil.login(10001, "PC"); // 指定设备类型登录,常用于“同端互斥登录” +StpUtil.kickout(10001, "PC"); // 指定账号指定设备类型踢下线 (不同端不受影响) StpUtil.openSafe(120); // 在当前会话开启二级认证,有效期为120秒 StpUtil.checkSafe(); // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常 StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号 diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java index 66039965..b3503dcc 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java @@ -154,7 +154,7 @@ public class SaSession implements Serializable { * 添加一个token签名 * * @param tokenValue token值 - * @param device 设备标识 + * @param device 设备类型 */ public void addTokenSign(String tokenValue, String device) { addTokenSign(new TokenSign(tokenValue, device)); diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/session/TokenSign.java b/sa-token-core/src/main/java/cn/dev33/satoken/session/TokenSign.java index 4342da39..4af451a3 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/session/TokenSign.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/session/TokenSign.java @@ -23,7 +23,7 @@ public class TokenSign implements Serializable { private String value; /** - * 所在设备标识 + * 所属设备类型 */ private String device; @@ -35,7 +35,7 @@ public class TokenSign implements Serializable { * 构建一个 * * @param value token值 - * @param device 所在设备标识 + * @param device 所属设备类型 */ public TokenSign(String value, String device) { this.value = value; @@ -50,7 +50,7 @@ public class TokenSign implements Serializable { } /** - * @return token登录设备 + * @return 所属设备类型 */ public String getDevice() { return device; diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginConfig.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginConfig.java index b62560a0..a25ce51f 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginConfig.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginConfig.java @@ -12,7 +12,7 @@ import java.util.Map; public class SaLoginConfig { /** - * @param device 此次登录的客户端设备标识 + * @param device 此次登录的客户端设备类型 * @return SaLoginModel配置对象 */ public static SaLoginModel setDevice(String device) { diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginModel.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginModel.java index 7c8480da..d940c56a 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginModel.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginModel.java @@ -16,7 +16,7 @@ import cn.dev33.satoken.util.SaTokenConsts; public class SaLoginModel { /** - * 此次登录的客户端设备标识 + * 此次登录的客户端设备类型 */ public String device; @@ -42,14 +42,14 @@ public class SaLoginModel { /** - * @return 此次登录的客户端设备标识 + * @return 此次登录的客户端设备类型 */ public String getDevice() { return device; } /** - * @param device 此次登录的客户端设备标识 + * @param device 此次登录的客户端设备类型 * @return 对象自身 */ public SaLoginModel setDevice(String device) { diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaTokenInfo.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaTokenInfo.java index 82e2482d..6812bca3 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaTokenInfo.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaTokenInfo.java @@ -35,7 +35,7 @@ public class SaTokenInfo { /** token剩余无操作有效时间 (单位: 秒) */ public long tokenActivityTimeout; - /** 登录设备标识 */ + /** 登录设备类型 */ public String loginDevice; /** 自定义数据 */ @@ -170,14 +170,14 @@ public class SaTokenInfo { } /** - * @return 登录设备标识 + * @return 登录设备类型 */ public String getLoginDevice() { return loginDevice; } /** - * @param loginDevice 登录设备标识 + * @param loginDevice 登录设备类型 */ public void setLoginDevice(String loginDevice) { this.loginDevice = loginDevice; 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 9300a6c4..5e8d697c 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 @@ -84,7 +84,7 @@ public class StpLogic { /** * 创建一个TokenValue * @param loginId loginId - * @param device 设备标识 + * @param device 设备类型 * @param timeout 过期时间 * @param extraData 扩展信息 * @return 生成的tokenValue @@ -251,9 +251,9 @@ public class StpLogic { } /** - * 会话登录,并指定登录设备 + * 会话登录,并指定登录设备类型 * @param id 账号id,建议的类型:(long | int | String) - * @param device 设备标识 + * @param device 设备类型 */ public void login(Object id, String device) { login(id, new SaLoginModel().setDevice(device)); @@ -385,10 +385,10 @@ public class StpLogic { } /** - * 会话注销,根据账号id 和 设备标识 + * 会话注销,根据账号id 和 设备类型 * * @param loginId 账号id - * @param device 设备标识 (填null代表所有注销设备) + * @param device 设备类型 (填null代表注销所有设备类型) */ public void logout(Object loginId, String device) { clearTokenCommonMethod(loginId, device, tokenValue -> { @@ -444,11 +444,11 @@ public class StpLogic { } /** - * 踢人下线,根据账号id 和 设备标识 + * 踢人下线,根据账号id 和 设备类型 *
当对方再次访问系统时,会抛出NotLoginException异常,场景值=-5
* * @param loginId 账号id - * @param device 设备标识 (填null代表踢出所有设备) + * @param device 设备类型 (填null代表踢出所有设备类型) */ public void kickout(Object loginId, String device) { clearTokenCommonMethod(loginId, device, tokenValue -> { @@ -491,11 +491,11 @@ public class StpLogic { } /** - * 顶人下线,根据账号id 和 设备标识 + * 顶人下线,根据账号id 和 设备类型 *当对方再次访问系统时,会抛出NotLoginException异常,场景值=-4
* * @param loginId 账号id - * @param device 设备标识 (填null代表顶替所有设备) + * @param device 设备类型 (填null代表顶替所有设备类型) */ public void replaced(Object loginId, String device) { clearTokenCommonMethod(loginId, device, tokenValue -> { @@ -508,7 +508,7 @@ public class StpLogic { /** * 封装 注销、踢人、顶人 三个动作的相同代码(无API含义方法) * @param loginId 账号id - * @param device 设备标识 + * @param device 设备类型 * @param appendFun 追加操作 * @param isLogoutSession 是否注销 User-Session */ @@ -1347,11 +1347,11 @@ public class StpLogic { } /** - * 获取指定账号id指定设备端的tokenValue + * 获取指定账号id指定设备类型端的tokenValue * 在配置为允许并发登录时,此方法只会返回队列的最后一个token,
* 如果你需要返回此账号id的所有token,请调用 getTokenValueListByLoginId
* @param loginId 账号id
- * @param device 设备标识,填null代表不限设备
+ * @param device 设备类型,填null代表不限设备类型
* @return token值
*/
public String getTokenValueByLoginId(Object loginId, String device) {
@@ -1369,9 +1369,9 @@ public class StpLogic {
}
/**
- * 获取指定账号id指定设备端的tokenValue 集合
+ * 获取指定账号id指定设备类型端的tokenValue 集合
* @param loginId 账号id
- * @param device 设备标识,填null代表不限设备
+ * @param device 设备类型,填null代表不限设备类型
* @return 此loginId的所有相关token
*/
public List 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-2 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-5 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-4 在配置为允许并发登录时,此方法只会返回队列的最后一个token,
* 如果你需要返回此账号id的所有token,请调用 getTokenValueListByLoginId
* @param loginId 账号id
- * @param device 设备标识
+ * @param device 设备类型
* @return token值
*/
public static String getTokenValueByLoginId(Object loginId, String device) {
@@ -651,9 +651,9 @@ public class StpUtil {
}
/**
- * 获取指定账号id指定设备端的tokenValue 集合
+ * 获取指定账号id指定设备类型端的tokenValue 集合
* @param loginId 账号id
- * @param device 设备标识
+ * @param device 设备类型
* @return 此loginId的所有相关token
*/
public static List 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-2 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-5 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-4 在配置为允许并发登录时,此方法只会返回队列的最后一个token,
* 如果你需要返回此账号id的所有token,请调用 getTokenValueListByLoginId
* @param loginId 账号id
- * @param device 设备标识
+ * @param device 设备类型
* @return token值
*/
public static String getTokenValueByLoginId(Object loginId, String device) {
@@ -631,9 +655,9 @@ public class StpUserUtil {
}
/**
- * 获取指定账号id指定设备端的tokenValue 集合
+ * 获取指定账号id指定设备类型端的tokenValue 集合
* @param loginId 账号id
- * @param device 设备标识
+ * @param device 设备类型
* @return 此loginId的所有相关token
*/
public static List 当对方再次访问系统时,会抛出NotLoginException异常,场景值=-2 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.kickout(id) ,使用方式保持不变
*
- * 会话注销,根据账号id and 设备标识 (踢人下线)
+ * 会话注销,根据账号id and 设备类型 (踢人下线)
* 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变
*
- * 在当前会话上登录id, 并指定登录设备
+ * 在当前会话上登录id, 并指定登录设备类型
* @param loginId 登录id,建议的类型:(long | int | String)
- * @param device 设备标识
+ * @param device 设备类型
*/
@Deprecated
public static void setLoginId(Object loginId, String device) {
@@ -859,7 +859,7 @@ public class StpUtil {
/**
* 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变
*
- * 在当前会话上登录id, 并指定登录设备
+ * 在当前会话上登录id, 并指定登录设备类型
* @param loginId 登录id,建议的类型:(long | int | String)
* @param isLastingCookie 是否为持久Cookie
*/
@@ -895,10 +895,10 @@ public class StpUtil {
/**
* 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.kickout() ,使用方式保持不变
*
- * 会话注销,根据账号id and 设备标识 (踢人下线)
+ * 会话注销,根据账号id and 设备类型 (踢人下线)
* 请注意: 即时token已经 [临时过期] 也可续签成功,
+ *
请注意: 即使token已经 [临时过期] 也可续签成功,
* 如果此场景下需要提示续签失败,可在此之前调用 checkActivityTimeout() 强制检查是否过期即可
*/
public static void updateLastActivityToNow() {
@@ -431,8 +440,23 @@ public class StpUserUtil {
public static long getTokenActivityTimeout() {
return stpLogic.getTokenActivityTimeout();
}
-
+ /**
+ * 对当前 Token 的 timeout 值进行续期
+ * @param timeout 要修改成为的有效时间 (单位: 秒)
+ */
+ public static void renewTimeout(long timeout) {
+ stpLogic.renewTimeout(timeout);
+ }
+
+ /**
+ * 对指定 Token 的 timeout 值进行续期
+ * @param tokenValue 指定token
+ * @param timeout 要修改成为的有效时间 (单位: 秒)
+ */
+ public static void renewTimeout(String tokenValue, long timeout) {
+ stpLogic.renewTimeout(tokenValue, timeout);
+ }
// =================== 角色验证操作 ===================
@@ -610,11 +634,11 @@ public class StpUserUtil {
}
/**
- * 获取指定账号id指定设备端的tokenValue
+ * 获取指定账号id指定设备类型端的tokenValue
* 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变
*
- * 在当前会话上登录id, 并指定登录设备
+ * 在当前会话上登录id, 并指定登录设备类型
* @param loginId 登录id,建议的类型:(long | int | String)
- * @param device 设备标识
+ * @param device 设备类型
*/
@Deprecated
public static void setLoginId(Object loginId, String device) {
@@ -839,7 +863,7 @@ public class StpUserUtil {
/**
* 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变
*
- * 在当前会话上登录id, 并指定登录设备
+ * 在当前会话上登录id, 并指定登录设备类型
* @param loginId 登录id,建议的类型:(long | int | String)
* @param isLastingCookie 是否为持久Cookie
*/
@@ -875,10 +899,10 @@ public class StpUserUtil {
/**
* 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.kickout() ,使用方式保持不变
*
- * 会话注销,根据账号id and 设备标识 (踢人下线)
+ * 会话注销,根据账号id and 设备类型 (踢人下线)
*
-首先在配置文件中,将 `isConcurrent` 配置为false,然后调用登录等相关接口时声明设备标识即可:
+首先在配置文件中,将 `isConcurrent` 配置为false,然后调用登录等相关接口时声明设备类型即可:
-#### 指定设备标识登录
+#### 指定设备类型登录
``` java
-// 指定`账号id`和`设备标识`进行登录
+// 指定`账号id`和`设备类型`进行登录
StpUtil.login(10001, "PC");
```
调用此方法登录后,同设备的会被顶下线(不同设备不受影响),再次访问系统时会抛出 `NotLoginException` 异常,场景值=`-4`
-#### 指定设备标识强制注销
+#### 指定设备类型强制注销
``` java
-// 指定`账号id`和`设备标识`进行强制注销
+// 指定`账号id`和`设备类型`进行强制注销
StpUtil.logout(10001, "PC");
```
如果第二个参数填写null或不填,代表将这个账号id所有在线端强制注销,被踢出者再次访问系统时会抛出 `NotLoginException` 异常,场景值=`-2`
-#### 查询当前登录的设备标识
+#### 查询当前登录的设备类型
``` java
-// 返回当前token的登录设备
+// 返回当前token的登录设备类型
StpUtil.getLoginDevice();
```
#### Id 反查 Token
``` java
-// 获取指定loginId指定设备端的tokenValue
+// 获取指定loginId指定设备类型端的tokenValue
StpUtil.getTokenValueByLoginId(10001, "APP");
```
diff --git a/sa-token-doc/doc/up/remember-me.md b/sa-token-doc/doc/up/remember-me.md
index 1f2e4f1a..10eb2124 100644
--- a/sa-token-doc/doc/up/remember-me.md
+++ b/sa-token-doc/doc/up/remember-me.md
@@ -69,7 +69,7 @@ StpUtil.login(10001, new SaLoginModel().setTimeout(60 * 60 * 24 * 7));
// ----------------------- 示例2:所有参数
// `SaLoginModel`为登录参数Model,其有诸多参数决定登录时的各种逻辑,例如:
StpUtil.login(10001, new SaLoginModel()
- .setDevice("PC") // 此次登录的客户端设备标识, 用于[同端互斥登录]时指定此次登录的设备名称
+ .setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型
.setIsLastingCookie(true) // 是否为持久Cookie(临时Cookie在浏览器关闭时会自动删除,持久Cookie在重新打开后依然存在)
.setTimeout(60 * 60 * 24 * 7) // 指定此次登录token的有效期, 单位:秒 (如未指定,自动取全局配置的timeout值)
.setToken("xxxx-xxxx-xxxx-xxxx") // 预定此次登录的生成的Token
diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtUtil.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtUtil.java
index 7cbbbfdd..3c3c234f 100644
--- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtUtil.java
+++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtUtil.java
@@ -28,7 +28,7 @@ public class SaJwtUtil {
public static final String LOGIN_ID = "loginId";
/**
- * key:登录设备
+ * key:登录设备类型
*/
public static final String DEVICE = "device";
@@ -73,7 +73,7 @@ public class SaJwtUtil {
* 创建 jwt (全参数方式)
* @param loginType 账号类型
* @param loginId 账号id
- * @param device 设备标识
+ * @param device 设备类型
* @param timeout token有效期 (单位 秒)
* @param extraData 扩展数据
* @param keyt 秘钥
@@ -265,7 +265,7 @@ public class SaJwtUtil {
* 创建 jwt (全参数方式)
* @param loginType 账号类型
* @param loginId 账号id
- * @param device 设备标识
+ * @param device 设备类型
* @param timeout token有效期 (单位 秒)
* @param keyt 秘钥
* @return jwt-token
diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMix.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMix.java
index 57177dae..180180fd 100644
--- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMix.java
+++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMix.java
@@ -113,7 +113,7 @@ public class StpLogicJwtForMix extends StpLogic {
}
/**
- * [禁用] 会话注销,根据账号id 和 设备标识
+ * [禁用] 会话注销,根据账号id 和 设备类型
*/
@Override
public void logout(Object loginId, String device) {
@@ -129,7 +129,7 @@ public class StpLogicJwtForMix extends StpLogic {
}
/**
- * [禁用] 踢人下线,根据账号id 和 设备标识
+ * [禁用] 踢人下线,根据账号id 和 设备类型
*/
@Override
public void kickout(Object loginId, String device) {
@@ -145,7 +145,7 @@ public class StpLogicJwtForMix extends StpLogic {
}
/**
- * [禁用] 顶人下线,根据账号id 和 设备标识
+ * [禁用] 顶人下线,根据账号id 和 设备类型
*/
@Override
public void replaced(Object loginId, String device) {
diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForStateless.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForStateless.java
index 04bb8c7a..8f571e9a 100644
--- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForStateless.java
+++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForStateless.java
@@ -158,8 +158,8 @@ public class StpLogicJwtForStateless extends StpLogic {
// ------------------- id 反查 token 相关操作 -------------------
/**
- * 返回当前会话的登录设备
- * @return 当前令牌的登录设备
+ * 返回当前会话的登录设备类型
+ * @return 当前令牌的登录设备类型
*/
@Override
public String getLoginDevice() {
diff --git a/sa-token-plugin/sa-token-spring-aop/pom.xml b/sa-token-plugin/sa-token-spring-aop/pom.xml
index b2516b93..ade793ec 100644
--- a/sa-token-plugin/sa-token-spring-aop/pom.xml
+++ b/sa-token-plugin/sa-token-spring-aop/pom.xml
@@ -20,7 +20,7 @@