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 f1ff5b74..117910f9 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
@@ -234,137 +234,133 @@ public class SaSession implements SaSetValueInterface, Serializable {
}
- // ----------------------- TokenSign 相关
+ // ----------------------- SaTerminalInfo 相关
/**
- * 此 Session 绑定的 Token 签名列表
+ * 登录终端信息列表
*/
- private List tokenSignList = new Vector<>();
+ private List terminalList = new Vector<>();
/**
- * 写入此 Session 绑定的 Token 签名列表
- * @param tokenSignList Token 签名列表
+ * 写入登录终端信息列表
+ * @param terminalList /
*/
- public void setTokenSignList(List tokenSignList) {
- this.tokenSignList = tokenSignList;
+ public void setTerminalList(List terminalList) {
+ this.terminalList = terminalList;
}
/**
- * 获取此 Session 绑定的 Token 签名列表
+ * 获取登录终端信息列表
*
- * @return Token 签名列表
+ * @return /
*/
- public List getTokenSignList() {
- return tokenSignList;
+ public List getTerminalList() {
+ return terminalList;
}
/**
- * 获取 Token 签名列表 的拷贝副本
+ * 获取 登录终端信息列表 (拷贝副本)
*
- * @return token签名列表
+ * @return /
*/
- public List tokenSignListCopy() {
- return new ArrayList<>(tokenSignList);
+ public List terminalListCopy() {
+ return new ArrayList<>(terminalList);
}
/**
- * 返回 Token 签名列表 的拷贝副本,根据 device 筛选
+ * 获取 登录终端信息列表 (拷贝副本),根据 deviceType 筛选
*
- * @param device 设备类型,填 null 代表不限设备类型
- * @return token签名列表
+ * @param deviceType 设备类型,填 null 代表不限设备类型
+ * @return /
*/
- public List getTokenSignListByDevice(String device) {
+ public List getTerminalListByDeviceType(String deviceType) {
// 返回全部
- if(device == null) {
- return tokenSignListCopy();
+ if(deviceType == null) {
+ return terminalListCopy();
}
// 返回筛选后的
- List tokenSignList = tokenSignListCopy();
- List list = new ArrayList<>();
- for (TokenSign tokenSign : tokenSignList) {
- if(SaFoxUtil.equals(tokenSign.getDevice(), device)) {
- list.add(tokenSign);
+ List copyList = terminalListCopy();
+ List newList = new ArrayList<>();
+ for (SaTerminalInfo terminal : copyList) {
+ if(SaFoxUtil.equals(terminal.getDeviceType(), deviceType)) {
+ newList.add(terminal);
}
}
- return list;
+ return newList;
}
/**
- * 获取当前 Session 上的所有 token 列表
+ * 获取 登录终端 token 列表
*
- * @param device 设备类型,填 null 代表不限设备类型
+ * @param deviceType 设备类型,填 null 代表不限设备类型
* @return 此 loginId 的所有登录 token
*/
- public List getTokenValueListByDevice(String device) {
- // 遍历解析,按照设备类型进行筛选
- List tokenSignList = tokenSignListCopy();
+ public List getTokenValueListByDeviceType(String deviceType) {
List tokenValueList = new ArrayList<>();
- for (TokenSign tokenSign : tokenSignList) {
- if(device == null || tokenSign.getDevice().equals(device)) {
- tokenValueList.add(tokenSign.getValue());
- }
+ for (SaTerminalInfo terminal : getTerminalListByDeviceType(deviceType)) {
+ tokenValueList.add(terminal.getTokenValue());
}
return tokenValueList;
}
/**
- * 查找一个 Token 签名
+ * 查找一个终端信息,根据 tokenValue
*
- * @param tokenValue token值
- * @return 查找到的 TokenSign
+ * @param tokenValue /
+ * @return /
*/
- public TokenSign getTokenSign(String tokenValue) {
- for (TokenSign tokenSign : tokenSignListCopy()) {
- if (SaFoxUtil.equals(tokenSign.getValue(), tokenValue)) {
- return tokenSign;
+ public SaTerminalInfo getTerminal(String tokenValue) {
+ for (SaTerminalInfo terminal : terminalListCopy()) {
+ if (SaFoxUtil.equals(terminal.getTokenValue(), tokenValue)) {
+ return terminal;
}
}
return null;
}
/**
- * 添加一个 Token 签名
+ * 添加一个终端信息
*
- * @param tokenSign Token 签名
+ * @param terminalInfo /
*/
- public void addTokenSign(TokenSign tokenSign) {
- // 根据 tokenValue 值查重,如果不存在,则添加
- TokenSign oldTokenSign = getTokenSign(tokenSign.getValue());
- if(oldTokenSign == null) {
- tokenSignList.add(tokenSign);
- update();
- } else {
- // 如果存在,则更新
- oldTokenSign.setValue(tokenSign.getValue());
- oldTokenSign.setDevice(tokenSign.getDevice());
- oldTokenSign.setTag(tokenSign.getTag());
- update();
+ public void addTerminal(SaTerminalInfo terminalInfo) {
+ // 根据 tokenValue 值查重,如果存在旧的,则先删除
+ SaTerminalInfo oldTerminal = getTerminal(terminalInfo.getTokenValue());
+ if(oldTerminal != null) {
+ terminalList.remove(oldTerminal);
}
+ // 然后添加新的
+ terminalList.add(terminalInfo);
+ update();
}
/**
- * 添加一个 Token 签名
- *
- * @param tokenValue token值
- * @param device 设备类型
- */
- @Deprecated
- public void addTokenSign(String tokenValue, String device) {
- addTokenSign(new TokenSign(tokenValue, device, null));
- }
-
- /**
- * 移除一个 Token 签名
+ * 移除一个终端信息
*
* @param tokenValue token值
*/
- public void removeTokenSign(String tokenValue) {
- TokenSign tokenSign = getTokenSign(tokenValue);
- if (tokenSignList.remove(tokenSign)) {
+ public void removeTerminal(String tokenValue) {
+ SaTerminalInfo terminalInfo = getTerminal(tokenValue);
+ if (terminalList.remove(terminalInfo)) {
update();
}
}
+ /**
+ * 获取最大的终端索引值,如无返0
+ * @return /
+ */
+ public int maxTerminalIndex() {
+ int max = 0;
+ for (SaTerminalInfo terminal : terminalListCopy()) {
+ int index = terminal.getIndex();
+ if (index > max) {
+ max = index;
+ }
+ }
+ return max;
+ }
+
// ----------------------- 一些操作
@@ -382,9 +378,9 @@ public class SaSession implements SaSetValueInterface, Serializable {
SaTokenEventCenter.doLogoutSession(id);
}
- /** 当Session上的tokenSign数量为零时,注销会话 */
- public void logoutByTokenSignCountToZero() {
- if (tokenSignList.size() == 0) {
+ /** 当 Session 上的 SaTerminalInfo 数量为零时,注销会话 */
+ public void logoutByTerminalCountToZero() {
+ if (terminalList.isEmpty()) {
logout();
}
}
@@ -546,16 +542,4 @@ public class SaSession implements SaSetValueInterface, Serializable {
//
-
- /**
- * 请更换为:getTokenSignListByDevice(device)
- *
- * @param device 设备类型,填 null 代表不限设备类型
- * @return token签名列表
- */
- @Deprecated
- public List tokenSignListCopyByDevice(String device) {
- return getTokenSignListByDevice(device);
- }
-
}
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaTerminalInfo.java b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaTerminalInfo.java
new file mode 100644
index 00000000..813f009d
--- /dev/null
+++ b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaTerminalInfo.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright 2020-2099 sa-token.cc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package cn.dev33.satoken.session;
+
+import java.io.Serializable;
+
+/**
+ * 登录设备终端信息 Model
+ *
+ * @author click33
+ * @since 1.41.0
+ */
+public class SaTerminalInfo implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1406115065849845073L;
+
+ /**
+ * 登录会话索引值 (该账号第几个登录的设备, 从 1 开始)
+ */
+ private int index;
+
+ /**
+ * Token 值
+ */
+ private String tokenValue;
+
+ /**
+ * 所属设备类型,例如:PC、WEB、HD、MOBILE、APP
+ */
+ private String deviceType;
+
+ /**
+ * 登录设备唯一标识,例如:kQwIOrYvnXmSDkwEiFngrKidMcdrgKorXmSDkwEiFngrKidM
+ */
+ private String deviceId;
+
+ /**
+ * 此次登录的自定义挂载数据
+ */
+ private Object tag;
+
+ /**
+ * 创建时间
+ */
+ private long createTime;
+
+ /**
+ * 构建一个
+ */
+ public SaTerminalInfo() {
+ }
+
+ /**
+ * 构建一个
+ *
+ * @param index 登录会话索引值 (该账号第几个登录的设备)
+ * @param tokenValue Token 值
+ * @param deviceType 所属设备类型
+ * @param tag 此客户端登录的挂载数据
+ */
+ public SaTerminalInfo(int index, String tokenValue, String deviceType, Object tag) {
+ this.index = index;
+ this.tokenValue = tokenValue;
+ this.deviceType = deviceType;
+ this.tag = tag;
+ this.createTime = System.currentTimeMillis();
+ }
+
+ /**
+ * 获取 登录会话索引值 (该账号第几个登录的设备)
+ *
+ * @return index 登录会话索引值 (该账号第几个登录的设备)
+ */
+ public int getIndex() {
+ return this.index;
+ }
+
+ /**
+ * 设置 登录会话索引值 (该账号第几个登录的设备)
+ *
+ * @param index 登录会话索引值 (该账号第几个登录的设备)
+ * @return 对象自身
+ */
+ public SaTerminalInfo setIndex(int index) {
+ this.index = index;
+ return this;
+ }
+
+ /**
+ * @return Token 值
+ */
+ public String getTokenValue() {
+ return tokenValue;
+ }
+
+ /**
+ * 写入 Token 值
+ *
+ * @param tokenValue /
+ * @return 对象自身
+ */
+ public SaTerminalInfo setTokenValue(String tokenValue) {
+ this.tokenValue = tokenValue;
+ return this;
+ }
+
+ /**
+ * @return 所属设备类型
+ */
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ /**
+ * 写入所属设备类型
+ *
+ * @param deviceType /
+ * @return 对象自身
+ */
+ public SaTerminalInfo setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ return this;
+ }
+
+ /**
+ * 获取 登录设备唯一标识
+ *
+ * @return deviceId 登录设备唯一标识
+ */
+ public String getDeviceId() {
+ return this.deviceId;
+ }
+
+ /**
+ * 设置 登录设备唯一标识,例如:kQwIOrYvnXmSDkwEiFngrKidMcdrgKorXmSDkwEiFngrKidM
+ *
+ * @param deviceId 登录设备唯一标识,例如:kQwIOrYvnXmSDkwEiFngrKidMcdrgKorXmSDkwEiFngrKidM
+ * @return 对象自身
+ */
+ public SaTerminalInfo setDeviceId(String deviceId) {
+ this.deviceId = deviceId;
+ return this;
+ }
+
+ /**
+ * 获取 此客户端登录的挂载数据
+ *
+ * @return /
+ */
+ public Object getTag() {
+ return this.tag;
+ }
+
+ /**
+ * 设置 此客户端登录的挂载数据
+ *
+ * @param tag /
+ * @return 对象自身
+ */
+ public SaTerminalInfo setTag(Object tag) {
+ this.tag = tag;
+ return this;
+ }
+
+ /**
+ * 获取 创建时间
+ *
+ * @return createTime 创建时间
+ */
+ public long getCreateTime() {
+ return this.createTime;
+ }
+
+ /**
+ * 设置 创建时间
+ *
+ * @param createTime 创建时间
+ * @return 对象自身
+ */
+ public SaTerminalInfo setCreateTime(long createTime) {
+ this.createTime = createTime;
+ return this;
+ }
+
+ //
+ @Override
+ public String toString() {
+ return "TokenSign [" +
+ "index=" + index +
+ ", tokenValue=" + tokenValue +
+ ", deviceType=" + deviceType +
+ ", deviceId=" + deviceId +
+ ", tag=" + tag +
+ ", createTime=" + createTime +
+ "]";
+ }
+
+
+
+ /*
+ * Expand in the future:
+ * deviceName 登录设备端名称,一般为浏览器名称
+ * systemName 登录设备操作系统名称
+ * loginIp 登录IP地址
+ * address 登录设备地理位置
+ * loginTime 登录时间
+ */
+
+}
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
deleted file mode 100644
index 8abc7d52..00000000
--- a/sa-token-core/src/main/java/cn/dev33/satoken/session/TokenSign.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2020-2099 sa-token.cc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package cn.dev33.satoken.session;
-
-import java.io.Serializable;
-
-/**
- * Token 签名 Model
- *
- * 挂在到 SaSession 上的 Token 签名,一般情况下,一个 TokenSign 代表一个登录的会话。
- *
- * @author click33
- * @since 1.8.0
- */
-public class TokenSign implements Serializable {
-
- /**
- *
- */
- private static final long serialVersionUID = 1406115065849845073L;
-
- /**
- * Token 值
- */
- private String value;
-
- /**
- * 所属设备类型
- */
- private String device;
-
- /**
- * 此客户端登录的挂载数据
- */
- private Object tag;
-
- /**
- * 构建一个
- */
- public TokenSign() {
- }
-
- /**
- * 构建一个
- *
- * @param value Token 值
- * @param device 所属设备类型
- * @param tag 此客户端登录的挂载数据
- */
- public TokenSign(String value, String device, Object tag) {
- this.value = value;
- this.device = device;
- this.tag = tag;
- }
-
- /**
- * @return Token 值
- */
- public String getValue() {
- return value;
- }
-
- /**
- * @return 所属设备类型
- */
- public String getDevice() {
- return device;
- }
-
- /**
- * 写入 Token 值
- *
- * @param value /
- * @return 对象自身
- */
- public TokenSign setValue(String value) {
- this.value = value;
- return this;
- }
-
- /**
- * 写入所属设备类型
- *
- * @param device /
- * @return 对象自身
- */
- public TokenSign setDevice(String device) {
- this.device = device;
- return this;
- }
-
- /**
- * 获取 此客户端登录的挂载数据
- *
- * @return /
- */
- public Object getTag() {
- return this.tag;
- }
-
- /**
- * 设置 此客户端登录的挂载数据
- *
- * @param tag /
- * @return 对象自身
- */
- public TokenSign setTag(Object tag) {
- this.tag = tag;
- return this;
- }
-
- //
- @Override
- public String toString() {
- return "TokenSign [value=" + value + ", device=" + device + ", tag=" + tag + "]";
- }
-
-}
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 66993a6e..de5d22b9 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
@@ -46,7 +46,7 @@ public class SaLoginConfig {
* @return 登录参数 Model
*/
public static SaLoginParameter setDevice(String device) {
- return create().setDevice(device);
+ return create().setDeviceType(device);
}
/**
@@ -114,7 +114,7 @@ public class SaLoginConfig {
* @return 登录参数 Model
*/
public static SaLoginParameter setTokenSignTag(Object tokenSignTag) {
- return create().setTokenSignTag(tokenSignTag);
+ return create().setTerminalTag(tokenSignTag);
}
/**
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginParameter.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginParameter.java
index 75b183e9..c41c0aba 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginParameter.java
+++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginParameter.java
@@ -41,7 +41,12 @@ public class SaLoginParameter {
/**
* 此次登录的客户端设备类型
*/
- private String device;
+ private String deviceType;
+
+ /**
+ * 此次登录的客户端设备id
+ */
+ private String deviceId;
/**
* 扩展信息(只在 jwt 模式下生效)
@@ -54,9 +59,9 @@ public class SaLoginParameter {
private String token;
/**
- * 本次登录挂载到 TokenSign 的数据
+ * 本次登录挂载到 SaTerminalInfo 的自定义数据
*/
- private Object tokenSignTag;
+ private Object terminalTag;
// --------- 覆盖性参数
@@ -118,7 +123,7 @@ public class SaLoginParameter {
* @return 对象自身
*/
public SaLoginParameter setDefaultValues(SaTokenConfig config) {
- this.device = SaTokenConsts.DEFAULT_LOGIN_DEVICE;
+ this.deviceType = SaTokenConsts.DEFAULT_LOGIN_DEVICE;
this.timeout = config.getTimeout();
this.isConcurrent = config.getIsConcurrent();
this.isShare = config.getIsShare();
@@ -184,10 +189,10 @@ public class SaLoginParameter {
* @return 获取device参数,如果为null,则返回默认值
*/
public String getDeviceOrDefault() {
- if(device == null) {
+ if(deviceType == null) {
return SaTokenConsts.DEFAULT_LOGIN_DEVICE;
}
- return device;
+ return deviceType;
}
/**
@@ -207,16 +212,35 @@ public class SaLoginParameter {
/**
* @return 此次登录的客户端设备类型
*/
- public String getDevice() {
- return device;
+ public String getDeviceType() {
+ return deviceType;
}
/**
- * @param device 此次登录的客户端设备类型
+ * @param deviceType 此次登录的客户端设备类型
* @return 对象自身
*/
- public SaLoginParameter setDevice(String device) {
- this.device = device;
+ public SaLoginParameter setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ return this;
+ }
+
+ /**
+ * 获取 此次登录的客户端设备id
+ *
+ * @return deviceId 此次登录的客户端设备id
+ */
+ public String getDeviceId() {
+ return this.deviceId;
+ }
+
+ /**
+ * 设置 此次登录的客户端设备id
+ *
+ * @param deviceId 此次登录的客户端设备id
+ */
+ public SaLoginParameter setDeviceId(String deviceId) {
+ this.deviceId = deviceId;
return this;
}
@@ -381,22 +405,22 @@ public class SaLoginParameter {
}
/**
- * 获取 本次登录挂载到 TokenSign 的数据
+ * 获取 本次登录挂载到 SaTerminalInfo 的自定义数据
*
- * @return tokenSignTag 本次登录挂载到 TokenSign 的数据
+ * @return 本次登录挂载到 SaTerminalInfo 的自定义数据
*/
- public Object getTokenSignTag() {
- return this.tokenSignTag;
+ public Object getTerminalTag() {
+ return this.terminalTag;
}
/**
- * 设置 本次登录挂载到 TokenSign 的数据
+ * 设置 本次登录挂载到 SaTerminalInfo 的自定义数据
*
- * @param tokenSignTag 本次登录挂载到 TokenSign 的数据
+ * @param terminalTag 本次登录挂载到 SaTerminalInfo 的自定义数据
* @return 对象自身
*/
- public SaLoginParameter setTokenSignTag(Object tokenSignTag) {
- this.tokenSignTag = tokenSignTag;
+ public SaLoginParameter setTerminalTag(Object terminalTag) {
+ this.terminalTag = terminalTag;
return this;
}
@@ -406,7 +430,8 @@ public class SaLoginParameter {
@Override
public String toString() {
return "SaLoginParameter ["
- + "device=" + device
+ + "deviceType=" + deviceType
+ + ", deviceId=" + deviceId
+ ", isLastingCookie=" + isLastingCookie
+ ", timeout=" + timeout
+ ", activeTimeout=" + activeTimeout
@@ -417,10 +442,31 @@ public class SaLoginParameter {
+ ", extraData=" + extraData
+ ", token=" + token
+ ", isWriteHeader=" + isWriteHeader
- + ", tokenSignTag=" + tokenSignTag
+ + ", terminalTag=" + terminalTag
+ "]";
}
+
+ /**
+ * 请更换为 getDeviceType
+ * @return 此次登录的客户端设备类型
+ */
+ @Deprecated
+ public String getDevice() {
+ return deviceType;
+ }
+
+ /**
+ * 请更换为 setDeviceType
+ * @param device 此次登录的客户端设备类型
+ * @return 对象自身
+ */
+ @Deprecated
+ public SaLoginParameter setDevice(String device) {
+ this.deviceType = device;
+ return this;
+ }
+
}
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 86c5aeae..b6e17853 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
@@ -69,7 +69,7 @@ public class SaTokenInfo {
public long tokenActiveTimeout;
/** 登录设备类型 */
- public String loginDevice;
+ public String loginDeviceType;
/** 自定义数据(暂无意义,留作扩展) */
public String tag;
@@ -205,15 +205,15 @@ public class SaTokenInfo {
/**
* @return 登录设备类型
*/
- public String getLoginDevice() {
- return loginDevice;
+ public String getLoginDeviceType() {
+ return loginDeviceType;
}
/**
- * @param loginDevice 登录设备类型
+ * @param loginDeviceType 登录设备类型
*/
- public void setLoginDevice(String loginDevice) {
- this.loginDevice = loginDevice;
+ public void setLoginDeviceType(String loginDeviceType) {
+ this.loginDeviceType = loginDeviceType;
}
/**
@@ -238,7 +238,7 @@ public class SaTokenInfo {
return "SaTokenInfo [tokenName=" + tokenName + ", tokenValue=" + tokenValue + ", isLogin=" + isLogin
+ ", loginId=" + loginId + ", loginType=" + loginType + ", tokenTimeout=" + tokenTimeout
+ ", sessionTimeout=" + sessionTimeout + ", tokenSessionTimeout=" + tokenSessionTimeout
- + ", tokenActiveTimeout=" + tokenActiveTimeout + ", loginDevice=" + loginDevice + ", tag=" + tag
+ + ", tokenActiveTimeout=" + tokenActiveTimeout + ", loginDeviceType=" + loginDeviceType + ", tag=" + tag
+ "]";
}
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 b13fe712..b1d35f11 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
@@ -16,7 +16,6 @@
package cn.dev33.satoken.stp;
import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.annotation.*;
import cn.dev33.satoken.config.SaCookieConfig;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.context.SaHolder;
@@ -25,13 +24,13 @@ import cn.dev33.satoken.context.model.SaRequest;
import cn.dev33.satoken.context.model.SaResponse;
import cn.dev33.satoken.context.model.SaStorage;
import cn.dev33.satoken.dao.SaTokenDao;
+import cn.dev33.satoken.session.SaTerminalInfo;
import cn.dev33.satoken.error.SaErrorCode;
import cn.dev33.satoken.exception.*;
import cn.dev33.satoken.fun.SaFunction;
import cn.dev33.satoken.listener.SaTokenEventCenter;
import cn.dev33.satoken.model.wrapperInfo.SaDisableWrapperInfo;
import cn.dev33.satoken.session.SaSession;
-import cn.dev33.satoken.session.TokenSign;
import cn.dev33.satoken.strategy.SaStrategy;
import cn.dev33.satoken.util.SaFoxUtil;
import cn.dev33.satoken.util.SaTokenConsts;
@@ -154,12 +153,12 @@ public class StpLogic {
* 为指定账号创建一个 token (只是把 token 创建出来,并不持久化存储)
*
* @param loginId 账号id
- * @param device 设备类型
+ * @param deviceType 设备类型
* @param timeout 过期时间
* @param extraData 扩展信息
* @return 生成的tokenValue
*/
- public String createTokenValue(Object loginId, String device, long timeout, Map extraData) {
+ public String createTokenValue(Object loginId, String deviceType, long timeout, Map extraData) {
return SaStrategy.instance.createToken.apply(loginId, loginType);
}
@@ -381,7 +380,7 @@ public class StpLogic {
info.sessionTimeout = getSessionTimeout();
info.tokenSessionTimeout = getTokenSessionTimeout();
info.tokenActiveTimeout = getTokenActiveTimeout();
- info.loginDevice = getLoginDevice();
+ info.loginDeviceType = getLoginDeviceType();
return info;
}
@@ -403,10 +402,10 @@ public class StpLogic {
* 会话登录,并指定登录设备类型
*
* @param id 账号id,建议的类型:(long | int | String)
- * @param device 设备类型
+ * @param deviceType 设备类型
*/
- public void login(Object id, String device) {
- login(id, createSaLoginParameter().setDevice(device));
+ public void login(Object id, String deviceType) {
+ login(id, createSaLoginParameter().setDeviceType(deviceType));
}
/**
@@ -462,8 +461,6 @@ public class StpLogic {
*/
public String createLoginSession(Object id, SaLoginParameter loginParameter) {
- SaTokenConfig config = getConfigOrGlobal();
-
// 1、先检查一下,传入的参数是否有效
checkLoginArgs(id, loginParameter);
@@ -474,9 +471,15 @@ public class StpLogic {
SaSession session = getSessionByLoginId(id, true, loginParameter.getTimeout());
session.updateMinTimeout(loginParameter.getTimeout());
- // 4、在 Account-Session 上记录本次登录的 token 签名
- TokenSign tokenSign = new TokenSign(tokenValue, loginParameter.getDevice(), loginParameter.getTokenSignTag());
- session.addTokenSign(tokenSign);
+ // 4、在 Account-Session 上记录本次登录的终端信息
+ SaTerminalInfo terminalInfo = new SaTerminalInfo()
+ .setIndex(session.maxTerminalIndex() + 1)
+ .setDeviceType(loginParameter.getDeviceType())
+ .setDeviceId(loginParameter.getDeviceId())
+ .setTokenValue(tokenValue)
+ .setTag(loginParameter.getTerminalTag())
+ .setCreateTime(System.currentTimeMillis());
+ session.addTerminal(terminalInfo);
// 5、保存 token -> id 的映射关系,方便日后根据 token 找账号 id
saveTokenToIdMapping(tokenValue, id, loginParameter.getTimeout());
@@ -517,7 +520,7 @@ public class StpLogic {
// 如果配置为:不允许一个账号多地同时登录,则需要先将这个账号的历史登录会话标记为:被顶下线
if( ! loginParameter.getIsConcurrent()) {
// TODO 此处应该加一个配置决定是只顶掉当前设备类型,还是所有类型
- replaced(id, loginParameter.getDevice());
+ replaced(id, loginParameter.getDeviceType());
}
// 2、如果调用者预定了要生成的 token,则直接返回这个预定的值,框架无需再操心了
@@ -532,7 +535,7 @@ public class StpLogic {
if(isSupportShareToken() && loginParameter.getIsShare()) {
// 根据 账号id + 设备类型,尝试获取旧的 token
- String tokenValue = getTokenValueByLoginId(id, loginParameter.getDevice());
+ String tokenValue = getTokenValueByLoginId(id, loginParameter.getDeviceType());
// 如果有值,那就直接复用
if(SaFoxUtil.isNotEmpty(tokenValue)) {
@@ -549,7 +552,7 @@ public class StpLogic {
"token",
getConfigOfMaxTryTimes(loginParameter),
() -> {
- return createTokenValue(id, loginParameter.getDevice(), loginParameter.getTimeout(), loginParameter.getExtraData());
+ return createTokenValue(id, loginParameter.getDeviceType(), loginParameter.getTimeout(), loginParameter.getExtraData());
},
tokenValue -> {
return getLoginIdNotHandle(tokenValue) == null;
@@ -662,21 +665,21 @@ public class StpLogic {
* 会话注销,根据账号id 和 设备类型
*
* @param loginId 账号id
- * @param device 设备类型 (填 null 代表注销该账号的所有设备类型)
+ * @param deviceType 设备类型 (填 null 代表注销该账号的所有设备类型)
*/
- public void logout(Object loginId, String device) {
+ public void logout(Object loginId, String deviceType) {
// 1、获取此账号的 Account-Session,上面记录了此账号的所有登录客户端数据
SaSession session = getSessionByLoginId(loginId, false);
if(session != null) {
- // 2、遍历此账号所有从这个 device 设备上登录的客户端,清除相关数据
- for (TokenSign tokenSign: session.getTokenSignListByDevice(device)) {
+ // 2、遍历此账号所有从这个 deviceType 设备类型上登录的客户端,清除相关数据
+ for (SaTerminalInfo terminal: session.getTerminalListByDeviceType(deviceType)) {
// 2.1、获取此客户端的 token 值
- String tokenValue = tokenSign.getValue();
+ String tokenValue = terminal.getTokenValue();
- // 2.2、从 Account-Session 上清除 token 签名
- session.removeTokenSign(tokenValue);
+ // 2.2、从 Account-Session 上清除此设备信息
+ session.removeTerminal(tokenValue);
// 2.3、清除这个 token 的最后活跃时间记录
if(isOpenCheckActiveTimeout()) {
@@ -694,7 +697,7 @@ public class StpLogic {
}
// 3、如果代码走到这里的时候,此账号已经没有客户端在登录了,则直接注销掉这个 Account-Session
- session.logoutByTokenSignCountToZero();
+ session.logoutByTerminalCountToZero();
}
}
@@ -703,10 +706,10 @@ public class StpLogic {
*
* @param loginId 账号id
* @param session 此账号的 Account-Session 对象,可填写 null,框架将自动获取
- * @param device 设备类型(填 null 代表注销此账号所有设备类型的登录)
+ * @param deviceType 设备类型(填 null 代表注销此账号所有设备类型的登录)
* @param maxLoginCount 最大登录数量,超过此数量的将被注销
*/
- public void logoutByMaxLoginCount(Object loginId, SaSession session, String device, int maxLoginCount) {
+ public void logoutByMaxLoginCount(Object loginId, SaSession session, String deviceType, int maxLoginCount) {
// 1、如果调用者提供的 Account-Session 对象为空,则我们先手动获取一下
if(session == null) {
@@ -717,16 +720,16 @@ public class StpLogic {
}
// 2、获取这个账号指定设备类型下的所有登录客户端
- List list = session.getTokenSignListByDevice(device);
+ List list = session.getTerminalListByDeviceType(deviceType);
// 3、按照登录时间倒叙,超过 maxLoginCount 数量的,全部注销掉
for (int i = 0; i < list.size() - maxLoginCount; i++) {
// 3.1、获取此客户端的 token 值
- String tokenValue = list.get(i).getValue();
+ String tokenValue = list.get(i).getTokenValue();
- // 3.2、从 Account-Session 上清除 token 签名
- session.removeTokenSign(tokenValue);
+ // 3.2、从 Account-Session 上清除 terminal 信息
+ session.removeTerminal(tokenValue);
// 3.3、清除这个 token 的最后活跃时间记录
if(isOpenCheckActiveTimeout()) {
@@ -744,7 +747,7 @@ public class StpLogic {
}
// 4、如果代码走到这里的时候,此账号已经没有客户端在登录了,则直接注销掉这个 Account-Session
- session.logoutByTokenSignCountToZero();
+ session.logoutByTerminalCountToZero();
}
/**
@@ -775,11 +778,11 @@ public class StpLogic {
// 5、$$ 发布事件:某某账号的某某 token 注销下线了
SaTokenEventCenter.doLogout(loginType, loginId, tokenValue);
- // 6、清理这个账号的 Account-Session 上的 token 签名,并且尝试注销掉 Account-Session
+ // 6、清理这个账号的 Account-Session 上的 terminal 信息,并且尝试注销掉 Account-Session
SaSession session = getSessionByLoginId(loginId, false);
if(session != null) {
- session.removeTokenSign(tokenValue);
- session.logoutByTokenSignCountToZero();
+ session.removeTerminal(tokenValue);
+ session.logoutByTerminalCountToZero();
}
}
@@ -798,21 +801,21 @@ public class StpLogic {
* 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5
*
* @param loginId 账号id
- * @param device 设备类型 (填 null 代表踢出该账号的所有设备类型)
+ * @param deviceType 设备类型 (填 null 代表踢出该账号的所有设备类型)
*/
- public void kickout(Object loginId, String device) {
+ public void kickout(Object loginId, String deviceType) {
// 1、获取此账号的 Account-Session,上面记录了此账号的所有登录客户端数据
SaSession session = getSessionByLoginId(loginId, false);
if(session != null) {
- // 2、遍历此账号所有从这个 device 设备上登录的客户端,清除相关数据
- for (TokenSign tokenSign: session.getTokenSignListByDevice(device)) {
+ // 2、遍历此账号所有从这个 deviceType 设备上登录的客户端,清除相关数据
+ for (SaTerminalInfo terminal: session.getTerminalListByDeviceType(deviceType)) {
// 2.1、获取此客户端的 token 值
- String tokenValue = tokenSign.getValue();
+ String tokenValue = terminal.getTokenValue();
- // 2.2、从 Account-Session 上清除 token 签名
- session.removeTokenSign(tokenValue);
+ // 2.2、从 Account-Session 上清除 terminal 信息
+ session.removeTerminal(tokenValue);
// 2.3、清除这个 token 的最后活跃时间记录
if(isOpenCheckActiveTimeout()) {
@@ -830,7 +833,7 @@ public class StpLogic {
}
// 3、如果代码走到这里的时候,此账号已经没有客户端在登录了,则直接注销掉这个 Account-Session
- session.logoutByTokenSignCountToZero();
+ session.logoutByTerminalCountToZero();
}
}
@@ -861,11 +864,11 @@ public class StpLogic {
// 5、$$. 发布事件:某某 token 被踢下线了
SaTokenEventCenter.doKickout(loginType, loginId, tokenValue);
- // 6、清理这个账号的 Account-Session 上的 token 签名,并且尝试注销掉 Account-Session
+ // 6、清理这个账号的 Account-Session 上的 terminal 信息,并且尝试注销掉 Account-Session
SaSession session = getSessionByLoginId(loginId, false);
if(session != null) {
- session.removeTokenSign(tokenValue);
- session.logoutByTokenSignCountToZero();
+ session.removeTerminal(tokenValue);
+ session.logoutByTerminalCountToZero();
}
}
@@ -874,21 +877,21 @@ public class StpLogic {
* 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4
*
* @param loginId 账号id
- * @param device 设备类型 (填 null 代表顶替该账号的所有设备类型)
+ * @param deviceType 设备类型 (填 null 代表顶替该账号的所有设备类型)
*/
- public void replaced(Object loginId, String device) {
+ public void replaced(Object loginId, String deviceType) {
// 1、获取此账号的 Account-Session,上面记录了此账号的所有登录客户端数据
SaSession session = getSessionByLoginId(loginId, false);
if(session != null) {
- // 2、遍历此账号所有从这个 device 设备上登录的客户端,清除相关数据
- for (TokenSign tokenSign: session.getTokenSignListByDevice(device)) {
+ // 2、遍历此账号所有从这个 deviceType 设备上登录的客户端,清除相关数据
+ for (SaTerminalInfo ter: session.getTerminalListByDeviceType(deviceType)) {
// 2.1、获取此客户端的 token 值
- String tokenValue = tokenSign.getValue();
+ String tokenValue = ter.getTokenValue();
- // 2.2、从 Account-Session 上清除 token 签名
- session.removeTokenSign(tokenValue);
+ // 2.2、从 Account-Session 上清除 terminal 信息
+ session.removeTerminal(tokenValue);
// 2.3、清除这个 token 的最后活跃时间记录
if(isOpenCheckActiveTimeout()) {
@@ -906,7 +909,7 @@ public class StpLogic {
}
// 3、因为调用顶替下线时,一般都是在新客户端正在登录,所以此处不需要清除该账号的 Account-Session
- // session.logoutByTokenSignCountToZero();
+ // session.logoutByTerminalCountToZero();
}
}
@@ -930,8 +933,8 @@ public class StpLogic {
* @return 已登录返回 true,未登录返回 false
*/
public boolean isLogin(Object loginId) {
- // 判断条件:能否根据 loginId 查询到对应的 tokenSign 值
- return getTokenSignListByLoginId(loginId, null).size() > 0;
+ // 判断条件:能否根据 loginId 查询到对应的 terminal 值
+ return !getTerminalListByLoginId(loginId, null).isEmpty();
}
/**
@@ -2103,11 +2106,11 @@ public class StpLogic {
*
*
* @param loginId 账号id
- * @param device 设备类型,填 null 代表不限设备类型
+ * @param deviceType 设备类型,填 null 代表不限设备类型
* @return token值
*/
- public String getTokenValueByLoginId(Object loginId, String device) {
- List tokenValueList = getTokenValueListByLoginId(loginId, device);
+ public String getTokenValueByLoginId(Object loginId, String deviceType) {
+ List tokenValueList = getTokenValueListByLoginId(loginId, deviceType);
return tokenValueList.isEmpty() ? null : tokenValueList.get(tokenValueList.size() - 1);
}
@@ -2125,10 +2128,10 @@ public class StpLogic {
* 获取指定账号 id 指定设备类型端的 token 集合
*
* @param loginId 账号id
- * @param device 设备类型,填 null 代表不限设备类型
+ * @param deviceType 设备类型,填 null 代表不限设备类型
* @return 此 loginId 的所有登录 token
*/
- public List getTokenValueListByLoginId(Object loginId, String device) {
+ public List getTokenValueListByLoginId(Object loginId, String deviceType) {
// 如果该账号的 Account-Session 为 null,说明此账号尚没有客户端在登录,此时返回空集合
SaSession session = getSessionByLoginId(loginId, false);
if(session == null) {
@@ -2136,17 +2139,17 @@ public class StpLogic {
}
// 按照设备类型进行筛选
- return session.getTokenValueListByDevice(device);
+ return session.getTokenValueListByDeviceType(deviceType);
}
/**
- * 获取指定账号 id 指定设备类型端的 tokenSign 集合
+ * 获取指定账号 id 指定设备类型端的 Terminal 集合
*
* @param loginId 账号id
- * @param device 设备类型,填 null 代表不限设备类型
+ * @param deviceType 设备类型,填 null 代表不限设备类型
* @return 此 loginId 的所有登录 token
*/
- public List getTokenSignListByLoginId(Object loginId, String device) {
+ public List getTerminalListByLoginId(Object loginId, String deviceType) {
// 如果该账号的 Account-Session 为 null,说明此账号尚没有客户端在登录,此时返回空集合
SaSession session = getSessionByLoginId(loginId, false);
if(session == null) {
@@ -2154,7 +2157,7 @@ public class StpLogic {
}
// 按照设备类型进行筛选
- return session.getTokenSignListByDevice(device);
+ return session.getTerminalListByDeviceType(deviceType);
}
/**
@@ -2162,8 +2165,8 @@ public class StpLogic {
*
* @return 当前令牌的登录设备类型
*/
- public String getLoginDevice() {
- return getLoginDeviceByToken(getTokenValue());
+ public String getLoginDeviceType() {
+ return getLoginDeviceTypeByToken(getTokenValue());
}
/**
@@ -2172,7 +2175,7 @@ public class StpLogic {
* @param tokenValue 指定token
* @return 当前令牌的登录设备类型
*/
- public String getLoginDeviceByToken(String tokenValue) {
+ public String getLoginDeviceTypeByToken(String tokenValue) {
// 1、如果 token 为 null,直接提前返回
if(SaFoxUtil.isEmpty(tokenValue)) {
return null;
@@ -2196,10 +2199,10 @@ public class StpLogic {
}
// 5、遍历 Account-Session 上的客户端 token 列表,寻找当前 token 对应的设备类型
- List tokenSignList = session.tokenSignListCopy();
- for (TokenSign tokenSign : tokenSignList) {
- if(tokenSign.getValue().equals(tokenValue)) {
- return tokenSign.getDevice();
+ List terminalList = session.terminalListCopy();
+ for (SaTerminalInfo terminal : terminalList) {
+ if(terminal.getTokenValue().equals(tokenValue)) {
+ return terminal.getDeviceType();
}
}
@@ -2904,79 +2907,26 @@ public class StpLogic {
// ------------------- 过期方法 -------------------
/**
- * 根据注解 ( @SaCheckLogin ) 鉴权
+ * 请更换为 getLoginDeviceType
+ * 返回当前会话的登录设备类型
*
- * @param at 注解对象
+ * @return 当前令牌的登录设备类型
*/
@Deprecated
- public void checkByAnnotation(SaCheckLogin at) {
- this.checkLogin();
+ public String getLoginDevice() {
+ return getLoginDeviceType();
}
/**
- * 根据注解 ( @SaCheckRole ) 鉴权
+ * 请更换为 getLoginDeviceTypeByToken
+ * 返回指定 token 会话的登录设备类型
*
- * @param at 注解对象
+ * @param tokenValue 指定token
+ * @return 当前令牌的登录设备类型
*/
@Deprecated
- public void checkByAnnotation(SaCheckRole at) {
- String[] roleArray = at.value();
- if(at.mode() == SaMode.AND) {
- this.checkRoleAnd(roleArray);
- } else {
- this.checkRoleOr(roleArray);
- }
+ public String getLoginDeviceByToken(String tokenValue) {
+ return getLoginDeviceTypeByToken(tokenValue);
}
- /**
- * 根据注解 ( @SaCheckPermission ) 鉴权
- *
- * @param at 注解对象
- */
- @Deprecated
- public void checkByAnnotation(SaCheckPermission at) {
- String[] permissionArray = at.value();
- try {
- if(at.mode() == SaMode.AND) {
- this.checkPermissionAnd(permissionArray);
- } else {
- this.checkPermissionOr(permissionArray);
- }
- } catch (NotPermissionException e) {
- // 权限认证校验未通过,再开始角色认证校验
- for (String role : at.orRole()) {
- String[] rArr = SaFoxUtil.convertStringToArray(role);
- // 某一项 role 认证通过,则可以提前退出了,代表通过
- if (hasRoleAnd(rArr)) {
- return;
- }
- }
- throw e;
- }
- }
-
- /**
- * 根据注解 ( @SaCheckSafe ) 鉴权
- *
- * @param at 注解对象
- */
- @Deprecated
- public void checkByAnnotation(SaCheckSafe at) {
- this.checkSafe(at.value());
- }
-
- /**
- * 根据注解 ( @SaCheckDisable ) 鉴权
- *
- * @param at 注解对象
- */
- @Deprecated
- public void checkByAnnotation(SaCheckDisable at) {
- Object loginId = getLoginId();
- for (String service : at.value()) {
- this.checkDisableLevel(loginId, service, at.level());
- }
- }
-
-
}
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 d381ab67..efadc1d5 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
@@ -16,10 +16,10 @@
package cn.dev33.satoken.stp;
import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.session.SaTerminalInfo;
import cn.dev33.satoken.fun.SaFunction;
import cn.dev33.satoken.listener.SaTokenEventCenter;
import cn.dev33.satoken.session.SaSession;
-import cn.dev33.satoken.session.TokenSign;
import java.util.List;
@@ -168,10 +168,10 @@ public class StpUtil {
* 会话登录,并指定登录设备类型
*
* @param id 账号id,建议的类型:(long | int | String)
- * @param device 设备类型
+ * @param deviceType 设备类型
*/
- public static void login(Object id, String device) {
- stpLogic.login(id, device);
+ public static void login(Object id, String deviceType) {
+ stpLogic.login(id, deviceType);
}
/**
@@ -257,10 +257,10 @@ public class StpUtil {
* 会话注销,根据账号id 和 设备类型
*
* @param loginId 账号id
- * @param device 设备类型 (填 null 代表注销该账号的所有设备类型)
+ * @param deviceType 设备类型 (填 null 代表注销该账号的所有设备类型)
*/
- public static void logout(Object loginId, String device) {
- stpLogic.logout(loginId, device);
+ public static void logout(Object loginId, String deviceType) {
+ stpLogic.logout(loginId, deviceType);
}
/**
@@ -287,10 +287,10 @@ public class StpUtil {
* 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5
*
* @param loginId 账号id
- * @param device 设备类型 (填 null 代表踢出该账号的所有设备类型)
+ * @param deviceType 设备类型 (填 null 代表踢出该账号的所有设备类型)
*/
- public static void kickout(Object loginId, String device) {
- stpLogic.kickout(loginId, device);
+ public static void kickout(Object loginId, String deviceType) {
+ stpLogic.kickout(loginId, deviceType);
}
/**
@@ -308,10 +308,10 @@ public class StpUtil {
* 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4
*
* @param loginId 账号id
- * @param device 设备类型 (填 null 代表顶替该账号的所有设备类型)
+ * @param deviceType 设备类型 (填 null 代表顶替该账号的所有设备类型)
*/
- public static void replaced(Object loginId, String device) {
- stpLogic.replaced(loginId, device);
+ public static void replaced(Object loginId, String deviceType) {
+ stpLogic.replaced(loginId, deviceType);
}
// 会话查询
@@ -806,11 +806,11 @@ public class StpUtil {
*
*
* @param loginId 账号id
- * @param device 设备类型,填 null 代表不限设备类型
+ * @param deviceType 设备类型,填 null 代表不限设备类型
* @return token值
*/
- public static String getTokenValueByLoginId(Object loginId, String device) {
- return stpLogic.getTokenValueByLoginId(loginId, device);
+ public static String getTokenValueByLoginId(Object loginId, String deviceType) {
+ return stpLogic.getTokenValueByLoginId(loginId, deviceType);
}
/**
@@ -827,22 +827,22 @@ public class StpUtil {
* 获取指定账号 id 指定设备类型端的 token 集合
*
* @param loginId 账号id
- * @param device 设备类型,填 null 代表不限设备类型
+ * @param deviceType 设备类型,填 null 代表不限设备类型
* @return 此 loginId 的所有登录 token
*/
- public static List getTokenValueListByLoginId(Object loginId, String device) {
- return stpLogic.getTokenValueListByLoginId(loginId, device);
+ public static List getTokenValueListByLoginId(Object loginId, String deviceType) {
+ return stpLogic.getTokenValueListByLoginId(loginId, deviceType);
}
/**
- * 获取指定账号 id 指定设备类型端的 tokenSign 集合
+ * 获取指定账号 id 指定设备类型端的 SaTerminalInfo 集合
*
* @param loginId 账号id
- * @param device 设备类型,填 null 代表不限设备类型
- * @return 此 loginId 的所有登录 tokenSign
+ * @param deviceType 设备类型,填 null 代表不限设备类型
+ * @return /
*/
- public static List getTokenSignListByLoginId(Object loginId, String device) {
- return stpLogic.getTokenSignListByLoginId(loginId, device);
+ public static List getTerminalListByLoginId(Object loginId, String deviceType) {
+ return stpLogic.getTerminalListByLoginId(loginId, deviceType);
}
/**
@@ -850,8 +850,8 @@ public class StpUtil {
*
* @return 当前令牌的登录设备类型
*/
- public static String getLoginDevice() {
- return stpLogic.getLoginDevice();
+ public static String getLoginDeviceType() {
+ return stpLogic.getLoginDeviceType();
}
/**
@@ -860,8 +860,8 @@ public class StpUtil {
* @param tokenValue 指定token
* @return 当前令牌的登录设备类型
*/
- public static String getLoginDeviceByToken(String tokenValue) {
- return stpLogic.getLoginDeviceByToken(tokenValue);
+ public static String getLoginDeviceTypeByToken(String tokenValue) {
+ return stpLogic.getLoginDeviceTypeByToken(tokenValue);
}
/**
@@ -1272,4 +1272,30 @@ public class StpUtil {
return stpLogic.createSaLoginParameter();
}
+
+ // ------------------- 过期方法 -------------------
+
+ /**
+ * 请更换为 getLoginDeviceType
+ * 返回当前会话的登录设备类型
+ *
+ * @return 当前令牌的登录设备类型
+ */
+ @Deprecated
+ public static String getLoginDevice() {
+ return stpLogic.getLoginDevice();
+ }
+
+ /**
+ * 请更换为 getLoginDeviceTypeByToken
+ * 返回指定 token 会话的登录设备类型
+ *
+ * @param tokenValue 指定token
+ * @return 当前令牌的登录设备类型
+ */
+ @Deprecated
+ public static String getLoginDeviceByToken(String tokenValue) {
+ return stpLogic.getLoginDeviceByToken(tokenValue);
+ }
+
}
diff --git a/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/cases/use/LoginAuthController.java b/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/cases/use/LoginAuthController.java
index 6fcf96d2..3dbfb9f3 100644
--- a/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/cases/use/LoginAuthController.java
+++ b/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/cases/use/LoginAuthController.java
@@ -109,7 +109,7 @@ public class LoginAuthController {
System.out.println("当前是否登录:" + info.getIsLogin());
System.out.println("当前登录的账号id:" + info.getLoginId());
System.out.println("当前登录账号的类型:" + info.getLoginType());
- System.out.println("当前登录客户端的设备类型:" + info.getLoginDevice());
+ System.out.println("当前登录客户端的设备类型:" + info.getLoginDeviceType());
System.out.println("当前 Token 的剩余有效期:" + info.getTokenTimeout()); // 单位:秒,-1代表永久有效,-2代表值不存在
System.out.println("当前 Token 距离被冻结还剩:" + info.getTokenActiveTimeout()); // 单位:秒,-1代表永久有效,-2代表值不存在
System.out.println("当前 Account-Session 的剩余有效期" + info.getSessionTimeout()); // 单位:秒,-1代表永久有效,-2代表值不存在
diff --git a/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/satoken/StpUserUtil.java b/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/satoken/StpUserUtil.java
index f8a6c045..f64c77d7 100644
--- a/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/satoken/StpUserUtil.java
+++ b/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/satoken/StpUserUtil.java
@@ -4,21 +4,19 @@ import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.fun.SaFunction;
import cn.dev33.satoken.listener.SaTokenEventCenter;
import cn.dev33.satoken.session.SaSession;
-import cn.dev33.satoken.session.TokenSign;
+import cn.dev33.satoken.session.SaTerminalInfo;
import cn.dev33.satoken.stp.SaLoginParameter;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpLogic;
-import org.springframework.stereotype.Component;
import java.util.List;
/**
- * Sa-Token 权限认证工具类(User版)
+ * Sa-Token 权限认证工具类 (User 版)
*
* @author click33
* @since 1.0.0
*/
-@Component
public class StpUserUtil {
private StpUserUtil() {}
@@ -158,10 +156,10 @@ public class StpUserUtil {
* 会话登录,并指定登录设备类型
*
* @param id 账号id,建议的类型:(long | int | String)
- * @param device 设备类型
+ * @param deviceType 设备类型
*/
- public static void login(Object id, String device) {
- stpLogic.login(id, device);
+ public static void login(Object id, String deviceType) {
+ stpLogic.login(id, deviceType);
}
/**
@@ -247,10 +245,10 @@ public class StpUserUtil {
* 会话注销,根据账号id 和 设备类型
*
* @param loginId 账号id
- * @param device 设备类型 (填 null 代表注销该账号的所有设备类型)
+ * @param deviceType 设备类型 (填 null 代表注销该账号的所有设备类型)
*/
- public static void logout(Object loginId, String device) {
- stpLogic.logout(loginId, device);
+ public static void logout(Object loginId, String deviceType) {
+ stpLogic.logout(loginId, deviceType);
}
/**
@@ -277,10 +275,10 @@ public class StpUserUtil {
* 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5
*
* @param loginId 账号id
- * @param device 设备类型 (填 null 代表踢出该账号的所有设备类型)
+ * @param deviceType 设备类型 (填 null 代表踢出该账号的所有设备类型)
*/
- public static void kickout(Object loginId, String device) {
- stpLogic.kickout(loginId, device);
+ public static void kickout(Object loginId, String deviceType) {
+ stpLogic.kickout(loginId, deviceType);
}
/**
@@ -298,10 +296,10 @@ public class StpUserUtil {
* 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4
*
* @param loginId 账号id
- * @param device 设备类型 (填 null 代表顶替该账号的所有设备类型)
+ * @param deviceType 设备类型 (填 null 代表顶替该账号的所有设备类型)
*/
- public static void replaced(Object loginId, String device) {
- stpLogic.replaced(loginId, device);
+ public static void replaced(Object loginId, String deviceType) {
+ stpLogic.replaced(loginId, deviceType);
}
// 会话查询
@@ -796,11 +794,11 @@ public class StpUserUtil {
*
*
* @param loginId 账号id
- * @param device 设备类型,填 null 代表不限设备类型
+ * @param deviceType 设备类型,填 null 代表不限设备类型
* @return token值
*/
- public static String getTokenValueByLoginId(Object loginId, String device) {
- return stpLogic.getTokenValueByLoginId(loginId, device);
+ public static String getTokenValueByLoginId(Object loginId, String deviceType) {
+ return stpLogic.getTokenValueByLoginId(loginId, deviceType);
}
/**
@@ -817,22 +815,22 @@ public class StpUserUtil {
* 获取指定账号 id 指定设备类型端的 token 集合
*
* @param loginId 账号id
- * @param device 设备类型,填 null 代表不限设备类型
+ * @param deviceType 设备类型,填 null 代表不限设备类型
* @return 此 loginId 的所有登录 token
*/
- public static List getTokenValueListByLoginId(Object loginId, String device) {
- return stpLogic.getTokenValueListByLoginId(loginId, device);
+ public static List getTokenValueListByLoginId(Object loginId, String deviceType) {
+ return stpLogic.getTokenValueListByLoginId(loginId, deviceType);
}
/**
- * 获取指定账号 id 指定设备类型端的 tokenSign 集合
+ * 获取指定账号 id 指定设备类型端的 SaTerminalInfo 集合
*
* @param loginId 账号id
- * @param device 设备类型,填 null 代表不限设备类型
- * @return 此 loginId 的所有登录 tokenSign
+ * @param deviceType 设备类型,填 null 代表不限设备类型
+ * @return /
*/
- public static List getTokenSignListByLoginId(Object loginId, String device) {
- return stpLogic.getTokenSignListByLoginId(loginId, device);
+ public static List getTerminalListByLoginId(Object loginId, String deviceType) {
+ return stpLogic.getTerminalListByLoginId(loginId, deviceType);
}
/**
@@ -840,8 +838,8 @@ public class StpUserUtil {
*
* @return 当前令牌的登录设备类型
*/
- public static String getLoginDevice() {
- return stpLogic.getLoginDevice();
+ public static String getLoginDeviceType() {
+ return stpLogic.getLoginDeviceType();
}
/**
@@ -850,8 +848,8 @@ public class StpUserUtil {
* @param tokenValue 指定token
* @return 当前令牌的登录设备类型
*/
- public static String getLoginDeviceByToken(String tokenValue) {
- return stpLogic.getLoginDeviceByToken(tokenValue);
+ public static String getLoginDeviceTypeByToken(String tokenValue) {
+ return stpLogic.getLoginDeviceTypeByToken(tokenValue);
}
/**
@@ -1244,10 +1242,48 @@ public class StpUserUtil {
/**
* 在当前会话 结束指定业务标识的二级认证
*
- * @param service 业务标识
+ * @param service 业务标识
*/
public static void closeSafe(String service) {
stpLogic.closeSafe(service);
}
+
+ // ------------------- Bean 对象、字段代理 -------------------
+
+ /**
+ * 根据当前配置对象创建一个 SaLoginParameter 对象
+ *
+ * @return /
+ */
+ public static SaLoginParameter createSaLoginParameter() {
+ return stpLogic.createSaLoginParameter();
+ }
+
+
+ // ------------------- 过期方法 -------------------
+
+ /**
+ * 请更换为 getLoginDeviceType
+ * 返回当前会话的登录设备类型
+ *
+ * @return 当前令牌的登录设备类型
+ */
+ @Deprecated
+ public static String getLoginDevice() {
+ return stpLogic.getLoginDevice();
+ }
+
+ /**
+ * 请更换为 getLoginDeviceTypeByToken
+ * 返回指定 token 会话的登录设备类型
+ *
+ * @param tokenValue 指定token
+ * @return 当前令牌的登录设备类型
+ */
+ @Deprecated
+ public static String getLoginDeviceByToken(String tokenValue) {
+ return stpLogic.getLoginDeviceByToken(tokenValue);
+ }
+
}
diff --git a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/StpUserUtil.java b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/StpUserUtil.java
index 38670c30..278da594 100644
--- a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/StpUserUtil.java
+++ b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/StpUserUtil.java
@@ -818,7 +818,7 @@ public class StpUserUtil {
* @return 当前令牌的登录设备类型
*/
public static String getLoginDevice() {
- return stpLogic.getLoginDevice();
+ return stpLogic.getLoginDeviceType();
}
diff --git a/sa-token-doc/fun/refer-info.md b/sa-token-doc/fun/refer-info.md
index 9b9a4cda..54e108a0 100644
--- a/sa-token-doc/fun/refer-info.md
+++ b/sa-token-doc/fun/refer-info.md
@@ -7,6 +7,6 @@
- https://www.jb51.net/program/297714rev.htm
- https://www.bilibili.com/video/BV1WZ421W7Qx
- https://blog.csdn.net/Tomwildboar/article/details/139199801
-
+- 单元测试 - https://www.cnblogs.com/flypig666/p/11505277.html
diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtTemplate.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtTemplate.java
index 1f828409..c629c108 100644
--- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtTemplate.java
+++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtTemplate.java
@@ -50,7 +50,7 @@ public class SaJwtTemplate {
/**
* key:登录设备类型
*/
- public static final String DEVICE = "device";
+ public static final String DEVICE_TYPE = "deviceType";
/**
* key:有效截止期 (时间戳)
@@ -103,13 +103,13 @@ public class SaJwtTemplate {
*
* @param loginType 账号类型
* @param loginId 账号id
- * @param device 设备类型
+ * @param deviceType 设备类型
* @param timeout token有效期 (单位 秒)
* @param extraData 扩展数据
* @param keyt 秘钥
* @return jwt-token
*/
- public String createToken(String loginType, Object loginId, String device,
+ public String createToken(String loginType, Object loginId, String deviceType,
long timeout, Map extraData, String keyt) {
// 计算 eff 有效期:
@@ -124,7 +124,7 @@ public class SaJwtTemplate {
JWT jwt = JWT.create()
.setPayload(LOGIN_TYPE, loginType)
.setPayload(LOGIN_ID, loginId)
- .setPayload(DEVICE, device)
+ .setPayload(DEVICE_TYPE, deviceType)
.setPayload(EFF, effTime)
// 塞入一个随机字符串,防止同账号同一毫秒下每次生成的 token 都一样的
.setPayload(RN_STR, SaFoxUtil.getRandomString(32))
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 42c4b541..ce5c824e 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
@@ -65,7 +65,7 @@ public class SaJwtUtil {
/**
* key:登录设备类型
*/
- public static final String DEVICE = SaJwtTemplate.DEVICE;
+ public static final String DEVICE_TYPE = SaJwtTemplate.DEVICE_TYPE;
/**
* key:有效截止期 (时间戳)
@@ -105,15 +105,15 @@ public class SaJwtUtil {
* 创建 jwt (全参数方式)
* @param loginType 账号类型
* @param loginId 账号id
- * @param device 设备类型
+ * @param deviceType 设备类型
* @param timeout token有效期 (单位 秒)
* @param extraData 扩展数据
* @param keyt 秘钥
* @return jwt-token
*/
- public static String createToken(String loginType, Object loginId, String device,
+ public static String createToken(String loginType, Object loginId, String deviceType,
long timeout, Map extraData, String keyt) {
- return saJwtTemplate.createToken(loginType, loginId, device, timeout, extraData, keyt);
+ return saJwtTemplate.createToken(loginType, loginId, deviceType, timeout, extraData, keyt);
}
/**
diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMixin.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMixin.java
index a5d396d8..fe1aee31 100644
--- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMixin.java
+++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMixin.java
@@ -76,8 +76,8 @@ public class StpLogicJwtForMixin extends StpLogic {
* 创建一个TokenValue
*/
@Override
- public String createTokenValue(Object loginId, String device, long timeout, Map extraData) {
- return SaJwtUtil.createToken(loginType, loginId, device, timeout, extraData, jwtSecretKey());
+ public String createTokenValue(Object loginId, String deviceType, long timeout, Map extraData) {
+ return SaJwtUtil.createToken(loginType, loginId, deviceType, timeout, extraData, jwtSecretKey());
}
/**
@@ -96,7 +96,7 @@ public class StpLogicJwtForMixin extends StpLogic {
info.sessionTimeout = SaTokenDao.NOT_VALUE_EXPIRE;
info.tokenSessionTimeout = SaTokenDao.NOT_VALUE_EXPIRE;
info.tokenActiveTimeout = SaTokenDao.NOT_VALUE_EXPIRE;
- info.loginDevice = getLoginDevice();
+ info.loginDeviceType = getLoginDeviceType();
return info;
}
@@ -139,7 +139,7 @@ public class StpLogicJwtForMixin extends StpLogic {
* [禁用] 会话注销,根据账号id 和 设备类型
*/
@Override
- public void logout(Object loginId, String device) {
+ public void logout(Object loginId, String deviceType) {
throw new ApiDisabledException();
}
@@ -155,7 +155,7 @@ public class StpLogicJwtForMixin extends StpLogic {
* [禁用] 踢人下线,根据账号id 和 设备类型
*/
@Override
- public void kickout(Object loginId, String device) {
+ public void kickout(Object loginId, String deviceType) {
throw new ApiDisabledException();
}
@@ -171,7 +171,7 @@ public class StpLogicJwtForMixin extends StpLogic {
* [禁用] 顶人下线,根据账号id 和 设备类型
*/
@Override
- public void replaced(Object loginId, String device) {
+ public void replaced(Object loginId, String deviceType) {
throw new ApiDisabledException();
}
diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForSimple.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForSimple.java
index dfe8c7b2..2ec48327 100644
--- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForSimple.java
+++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForSimple.java
@@ -61,7 +61,7 @@ public class StpLogicJwtForSimple extends StpLogic {
* 创建一个TokenValue
*/
@Override
- public String createTokenValue(Object loginId, String device, long timeout, Map extraData) {
+ public String createTokenValue(Object loginId, String deviceType, long timeout, Map extraData) {
return SaJwtUtil.createToken(loginType, loginId, extraData, jwtSecretKey());
}
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 1d376dea..22f70d2b 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
@@ -73,8 +73,8 @@ public class StpLogicJwtForStateless extends StpLogic {
* 创建一个TokenValue
*/
@Override
- public String createTokenValue(Object loginId, String device, long timeout, Map extraData) {
- return SaJwtUtil.createToken(loginType, loginId, device, timeout, extraData, jwtSecretKey());
+ public String createTokenValue(Object loginId, String deviceType, long timeout, Map extraData) {
+ return SaJwtUtil.createToken(loginType, loginId, deviceType, timeout, extraData, jwtSecretKey());
}
/**
@@ -93,7 +93,7 @@ public class StpLogicJwtForStateless extends StpLogic {
info.sessionTimeout = SaTokenDao.NOT_VALUE_EXPIRE;
info.tokenSessionTimeout = SaTokenDao.NOT_VALUE_EXPIRE;
info.tokenActiveTimeout = SaTokenDao.NOT_VALUE_EXPIRE;
- info.loginDevice = getLoginDevice();
+ info.loginDeviceType = getLoginDeviceType();
return info;
}
@@ -112,7 +112,7 @@ public class StpLogicJwtForStateless extends StpLogic {
checkLoginArgs(id, loginParameter);
// 3、生成一个token
- String tokenValue = createTokenValue(id, loginParameter.getDevice(), loginParameter.getTimeout(), loginParameter.getExtraData());
+ String tokenValue = createTokenValue(id, loginParameter.getDeviceType(), loginParameter.getTimeout(), loginParameter.getExtraData());
// 4、$$ 发布事件:账号xxx 登录成功
SaTokenEventCenter.doLogin(loginType, id, tokenValue, loginParameter);
@@ -193,7 +193,7 @@ public class StpLogicJwtForStateless extends StpLogic {
* @return 当前令牌的登录设备类型
*/
@Override
- public String getLoginDevice() {
+ public String getLoginDeviceType() {
// 如果没有token,直接返回 null
String tokenValue = getTokenValue();
if(tokenValue == null) {
@@ -204,7 +204,7 @@ public class StpLogicJwtForStateless extends StpLogic {
return null;
}
// 获取
- return SaJwtUtil.getPayloadsNotCheck(tokenValue, loginType, jwtSecretKey()).getStr(SaJwtUtil.DEVICE);
+ return SaJwtUtil.getPayloadsNotCheck(tokenValue, loginType, jwtSecretKey()).getStr(SaJwtUtil.DEVICE_TYPE);
}
diff --git a/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForMixinTest.java b/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForMixinTest.java
index 917f9762..63807d69 100644
--- a/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForMixinTest.java
+++ b/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForMixinTest.java
@@ -65,7 +65,7 @@ public class JwtForMixinTest {
JWT jwt = JWT.of(token);
JSONObject payloads = jwt.getPayloads();
Assertions.assertEquals(payloads.getStr(SaJwtUtil.LOGIN_ID), "10001"); // 账号
- Assertions.assertEquals(payloads.getStr(SaJwtUtil.DEVICE), SaTokenConsts.DEFAULT_LOGIN_DEVICE); // 登录设备类型
+ Assertions.assertEquals(payloads.getStr(SaJwtUtil.DEVICE_TYPE), SaTokenConsts.DEFAULT_LOGIN_DEVICE); // 登录设备类型
Assertions.assertEquals(payloads.getStr(SaJwtUtil.LOGIN_TYPE), StpUtil.TYPE); // 账号类型
// db数据 验证
@@ -75,7 +75,7 @@ public class JwtForMixinTest {
SaSession session = dao.getSession("satoken:login:session:" + 10001);
Assertions.assertNotNull(session);
Assertions.assertEquals(session.getId(), "satoken:login:session:" + 10001);
- Assertions.assertTrue(session.getTokenSignList().size() >= 1);
+ Assertions.assertTrue(session.getTerminalList().size() >= 1);
}
// 测试:注销
diff --git a/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForSimpleTest.java b/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForSimpleTest.java
index 5e43c25d..c6aaf890 100644
--- a/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForSimpleTest.java
+++ b/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForSimpleTest.java
@@ -68,7 +68,7 @@ public class JwtForSimpleTest {
SaSession session = dao.getSession("satoken:login:session:" + 10001);
Assertions.assertNotNull(session);
Assertions.assertEquals(session.getId(), "satoken:login:session:" + 10001);
- Assertions.assertTrue(session.getTokenSignList().size() >= 1);
+ Assertions.assertTrue(session.getTerminalList().size() >= 1);
}
// 测试:getExtra
diff --git a/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForStatelessTest.java b/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForStatelessTest.java
index 53e0e67c..187cdf83 100644
--- a/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForStatelessTest.java
+++ b/sa-token-test/sa-token-jwt-test/src/test/java/com/pj/test/JwtForStatelessTest.java
@@ -61,7 +61,7 @@ public class JwtForStatelessTest {
JWT jwt = JWT.of(token);
JSONObject payloads = jwt.getPayloads();
Assertions.assertEquals(payloads.getStr(SaJwtUtil.LOGIN_ID), "10001"); // 账号
- Assertions.assertEquals(payloads.getStr(SaJwtUtil.DEVICE), SaTokenConsts.DEFAULT_LOGIN_DEVICE); // 登录设备类型
+ Assertions.assertEquals(payloads.getStr(SaJwtUtil.DEVICE_TYPE), SaTokenConsts.DEFAULT_LOGIN_DEVICE); // 登录设备类型
Assertions.assertEquals(payloads.getStr(SaJwtUtil.LOGIN_TYPE), StpUtil.TYPE); // 账号类型
// 时间
diff --git a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/session/SaSessionTest.java b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/session/SaSessionTest.java
index 601206f3..8e704a32 100644
--- a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/session/SaSessionTest.java
+++ b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/session/SaSessionTest.java
@@ -15,18 +15,17 @@
*/
package cn.dev33.satoken.core.session;
+import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.session.SaSession;
+import cn.dev33.satoken.session.SaTerminalInfo;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.session.SaSession;
-import cn.dev33.satoken.session.TokenSign;
-
/**
* SaSession 测试
*
@@ -112,33 +111,33 @@ public class SaSessionTest {
SaSession session = new SaSession("session-1002");
// 添加 Token 签名
- session.addTokenSign(new TokenSign("xxxx-xxxx-xxxx-xxxx-1", "PC", null));
- session.addTokenSign(new TokenSign("xxxx-xxxx-xxxx-xxxx-2", "APP", null));
+ session.addTerminal(new SaTerminalInfo(1, "xxxx-xxxx-xxxx-xxxx-1", "PC", null));
+ session.addTerminal(new SaTerminalInfo(2, "xxxx-xxxx-xxxx-xxxx-2", "APP", null));
// 查询
- Assertions.assertEquals(session.getTokenSignList().size(), 2);
- Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-1").getDevice(), "PC");
- Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-2").getDevice(), "APP");
+ Assertions.assertEquals(session.getTerminalList().size(), 2);
+ Assertions.assertEquals(session.getTerminal("xxxx-xxxx-xxxx-xxxx-1").getDeviceType(), "PC");
+ Assertions.assertEquals(session.getTerminal("xxxx-xxxx-xxxx-xxxx-2").getDeviceType(), "APP");
// 删除一个
- session.removeTokenSign("xxxx-xxxx-xxxx-xxxx-1");
- Assertions.assertEquals(session.getTokenSignList().size(), 1);
+ session.removeTerminal("xxxx-xxxx-xxxx-xxxx-1");
+ Assertions.assertEquals(session.getTerminalList().size(), 1);
// 删除一个不存在的,则不影响 TokenSign 列表
- session.removeTokenSign("xxxx-xxxx-xxxx-xxxx-999");
- Assertions.assertEquals(session.getTokenSignList().size(), 1);
+ session.removeTerminal("xxxx-xxxx-xxxx-xxxx-999");
+ Assertions.assertEquals(session.getTerminalList().size(), 1);
// 重置整个签名列表
- List list = Arrays.asList(
- new TokenSign("xxxx-xxxx-xxxx-xxxx-1", "WEB", null),
- new TokenSign("xxxx-xxxx-xxxx-xxxx-2", "phone", null),
- new TokenSign("xxxx-xxxx-xxxx-xxxx-3", "ipad", null)
+ List list = Arrays.asList(
+ new SaTerminalInfo(1, "xxxx-xxxx-xxxx-xxxx-1", "WEB", null),
+ new SaTerminalInfo(2, "xxxx-xxxx-xxxx-xxxx-2", "phone", null),
+ new SaTerminalInfo(3, "xxxx-xxxx-xxxx-xxxx-3", "ipad", null)
);
- session.setTokenSignList(list);
- Assertions.assertEquals(session.getTokenSignList().size(), 3);
- Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-1").getDevice(), "WEB");
- Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-2").getDevice(), "phone");
- Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-3").getDevice(), "ipad");
+ session.setTerminalList(list);
+ Assertions.assertEquals(session.getTerminalList().size(), 3);
+ Assertions.assertEquals(session.getTerminal("xxxx-xxxx-xxxx-xxxx-1").getDeviceType(), "WEB");
+ Assertions.assertEquals(session.getTerminal("xxxx-xxxx-xxxx-xxxx-2").getDeviceType(), "phone");
+ Assertions.assertEquals(session.getTerminal("xxxx-xxxx-xxxx-xxxx-3").getDeviceType(), "ipad");
}
// 测试重置 DataMap
diff --git a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/session/TokenSignTest.java b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/session/SaTerminalInfoTest.java
similarity index 70%
rename from sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/session/TokenSignTest.java
rename to sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/session/SaTerminalInfoTest.java
index 8c75d934..6dd5ea36 100644
--- a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/session/TokenSignTest.java
+++ b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/session/SaTerminalInfoTest.java
@@ -15,28 +15,27 @@
*/
package cn.dev33.satoken.core.session;
+import cn.dev33.satoken.session.SaTerminalInfo;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import cn.dev33.satoken.session.TokenSign;
-
/**
* TokenSign 相关测试
*
* @author click33
* @since 2022-9-4
*/
-public class TokenSignTest {
+public class SaTerminalInfoTest {
// 测试
@Test
- public void testTokenSign() {
- TokenSign tokenSign = new TokenSign();
- tokenSign.setDevice("PC");
- tokenSign.setValue("ttt-value");
+ public void testSaTerminalInfo() {
+ SaTerminalInfo tokenSign = new SaTerminalInfo();
+ tokenSign.setDeviceType("PC");
+ tokenSign.setTokenValue("ttt-value");
- Assertions.assertEquals(tokenSign.getDevice(), "PC");
- Assertions.assertEquals(tokenSign.getValue(), "ttt-value");
+ Assertions.assertEquals(tokenSign.getDeviceType(), "PC");
+ Assertions.assertEquals(tokenSign.getTokenValue(), "ttt-value");
Assertions.assertNotNull(tokenSign.toString());
}
diff --git a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/stp/TokenInfoTest.java b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/stp/TokenInfoTest.java
index ec73a2b5..496fa363 100644
--- a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/stp/TokenInfoTest.java
+++ b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/core/stp/TokenInfoTest.java
@@ -44,7 +44,7 @@ public class TokenInfoTest {
info.setSessionTimeout(120);
info.setTokenSessionTimeout(1800);
info.setTokenActiveTimeout(120);
- info.setLoginDevice("PC");
+ info.setLoginDeviceType("PC");
info.setTag("xxx");
Assertions.assertEquals(info.getTokenName(), "satoken");
@@ -56,7 +56,7 @@ public class TokenInfoTest {
Assertions.assertEquals(info.getSessionTimeout(), 120);
Assertions.assertEquals(info.getTokenSessionTimeout(), 1800);
Assertions.assertEquals(info.getTokenActiveTimeout(), 120);
- Assertions.assertEquals(info.getLoginDevice(), "PC");
+ Assertions.assertEquals(info.getLoginDeviceType(), "PC");
Assertions.assertEquals(info.getTag(), "xxx");
Assertions.assertNotNull(info.toString());
@@ -64,7 +64,7 @@ public class TokenInfoTest {
@Test
public void testLoginParameter() {
- Assertions.assertEquals(new SaLoginParameter().setDevice("PC").getDevice(), "PC");
+ Assertions.assertEquals(new SaLoginParameter().setDeviceType("PC").getDeviceType(), "PC");
Assertions.assertEquals(new SaLoginParameter().setIsLastingCookie(false).getIsLastingCookie(), false);
Assertions.assertEquals(new SaLoginParameter().setTimeout(1600).getTimeout(), 1600);
Assertions.assertEquals(new SaLoginParameter().setToken("token-xxx").getToken(), "token-xxx");
diff --git a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/BasicsTest.java b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/BasicsTest.java
index e6242b1f..b2672ae5 100644
--- a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/BasicsTest.java
+++ b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/BasicsTest.java
@@ -128,7 +128,7 @@ public class BasicsTest {
SaSession session = dao.getSession("satoken:login:session:" + 10001);
Assertions.assertNotNull(session);
Assertions.assertEquals(session.getId(), "satoken:login:session:" + 10001);
- Assertions.assertTrue(session.getTokenSignList().size() >= 1);
+ Assertions.assertTrue(session.getTerminalList().size() >= 1);
}
// 测试:注销
diff --git a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/ManyLoginTest.java b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/ManyLoginTest.java
index c1a17ae2..e0a4a8da 100644
--- a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/ManyLoginTest.java
+++ b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/ManyLoginTest.java
@@ -15,8 +15,12 @@
*/
package cn.dev33.satoken.springboot;
-import java.util.List;
-
+import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.config.SaTokenConfig;
+import cn.dev33.satoken.dao.SaTokenDao;
+import cn.dev33.satoken.session.SaTerminalInfo;
+import cn.dev33.satoken.stp.StpLogic;
+import cn.dev33.satoken.stp.StpUtil;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
@@ -24,12 +28,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
-import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.config.SaTokenConfig;
-import cn.dev33.satoken.dao.SaTokenDao;
-import cn.dev33.satoken.session.TokenSign;
-import cn.dev33.satoken.stp.StpLogic;
-import cn.dev33.satoken.stp.StpUtil;
+import java.util.List;
/**
* Sa-Token 多端登录测试
@@ -115,9 +114,9 @@ public class ManyLoginTest {
Assertions.assertEquals(dao.get("satoken:login:token:" + token1), "-4");
// Account-Session里的 token1 签名会被移除
- List tokenSignList = StpUtil.getSessionByLoginId(10001).getTokenSignList();
- for (TokenSign tokenSign : tokenSignList) {
- Assertions.assertNotEquals(tokenSign.getValue(), token1);
+ List tokenSignList = StpUtil.getSessionByLoginId(10001).getTerminalList();
+ for (SaTerminalInfo terminal : tokenSignList) {
+ Assertions.assertNotEquals(terminal.getTokenValue(), token1);
}
}