feat: 新增 StpUtil.getTerminalInfo() 查询设备信息、StpUtil.getLoginDeviceId() 查询登录设备id

This commit is contained in:
click33 2025-05-01 02:32:26 +08:00
parent 0229459d8d
commit c2dea166e4
2 changed files with 111 additions and 33 deletions

View File

@ -2388,6 +2388,56 @@ public class StpLogic {
session.forEachTerminalList(function);
}
/**
* 返回当前 token 指向的 SaTerminalInfo 设备信息如果 token 无效则返回 null
*
* @return /
*/
public SaTerminalInfo getTerminalInfo() {
return getTerminalInfoByToken(getTokenValue());
}
/**
* 返回指定 token 指向的 SaTerminalInfo 设备信息如果 Token 无效则返回 null
*
* @param tokenValue 指定 token
* @return /
*/
public SaTerminalInfo getTerminalInfoByToken(String tokenValue) {
// 1如果 token null直接提前返回
if(SaFoxUtil.isEmpty(tokenValue)) {
return null;
}
// 2判断 Token 是否有效
Object loginId = getLoginIdNotHandle(tokenValue);
if( ! isValidLoginId(loginId)) {
return null;
}
// 3判断 Account-Session 是否存在
SaSession session = getSessionByLoginId(loginId, false);
if(session == null) {
return null;
}
// 4判断 Token 是否已被冻结
if(isFreeze(tokenValue)) {
return null;
}
// 5遍历 Account-Session 上的客户端 token 列表寻找当前 token 对应的设备类型
List<SaTerminalInfo> terminalList = session.terminalListCopy();
for (SaTerminalInfo terminal : terminalList) {
if(terminal.getTokenValue().equals(tokenValue)) {
return terminal;
}
}
// 6没有找到还是返回 null
return null;
}
/**
* 返回当前会话的登录设备类型
*
@ -2404,38 +2454,28 @@ public class StpLogic {
* @return 当前令牌的登录设备类型
*/
public String getLoginDeviceTypeByToken(String tokenValue) {
// 1如果 token null直接提前返回
if(SaFoxUtil.isEmpty(tokenValue)) {
return null;
}
SaTerminalInfo terminalInfo = getTerminalInfoByToken(tokenValue);
return terminalInfo == null ? null : terminalInfo.getDeviceType();
}
// 2获取此 token 对应的 loginId如果为null或者此token已被冻结直接返回null
Object loginId = getLoginIdNotHandle(tokenValue);
if( ! isValidLoginId(loginId)) {
return null;
}
if(getTokenActiveTimeoutByToken(tokenValue) == SaTokenDao.NOT_VALUE_EXPIRE ) {
return null;
}
/**
* 返回当前会话的登录设备 ID
*
* @return /
*/
public String getLoginDeviceId() {
return getLoginDeviceIdByToken(getTokenValue());
}
// 3获取这个账号的 Account-Session
SaSession session = getSessionByLoginId(loginId, false);
// 4 null 说明尚未登录当然也就不存在什么设备类型直接返回 null
if(session == null) {
return null;
}
// 5遍历 Account-Session 上的客户端 token 列表寻找当前 token 对应的设备类型
List<SaTerminalInfo> terminalList = session.terminalListCopy();
for (SaTerminalInfo terminal : terminalList) {
if(terminal.getTokenValue().equals(tokenValue)) {
return terminal.getDeviceType();
}
}
// 6没有找到还是返回 null
return null;
/**
* 返回指定 token 会话的登录设备 ID
*
* @param tokenValue 指定token
* @return /
*/
public String getLoginDeviceIdByToken(String tokenValue) {
SaTerminalInfo terminalInfo = getTerminalInfoByToken(tokenValue);
return terminalInfo == null ? null : terminalInfo.getDeviceId();
}
/**

View File

@ -678,6 +678,15 @@ public class StpUtil {
stpLogic.checkActiveTimeout();
}
/**
* 获取当前 token 的最后活跃时间13位时间戳如果不存在则返回 -2
*
* @return /
*/
public static long getTokenLastActiveTime() {
return stpLogic.getTokenLastActiveTime();
}
// ------------------- 过期时间相关 -------------------
@ -1010,6 +1019,25 @@ public class StpUtil {
stpLogic.forEachTerminalList(loginId, function);
}
/**
* 返回当前 token 指向的 SaTerminalInfo 设备信息如果 token 无效则返回 null
*
* @return /
*/
public static SaTerminalInfo getTerminalInfo() {
return stpLogic.getTerminalInfo();
}
/**
* 返回指定 token 指向的 SaTerminalInfo 设备信息如果 Token 无效则返回 null
*
* @param tokenValue 指定 token
* @return /
*/
public static SaTerminalInfo getTerminalInfoByToken(String tokenValue) {
return stpLogic.getTerminalInfoByToken(tokenValue);
}
/**
* 返回当前会话的登录设备类型
*
@ -1030,12 +1058,22 @@ public class StpUtil {
}
/**
* 获取当前 token 的最后活跃时间13位时间戳如果不存在则返回 -2
* 返回当前会话的登录设备 ID
*
* @return /
*/
public static long getTokenLastActiveTime() {
return stpLogic.getTokenLastActiveTime();
public static String getLoginDeviceId() {
return stpLogic.getLoginDeviceId();
}
/**
* 返回指定 token 会话的登录设备 ID
*
* @param tokenValue 指定token
* @return /
*/
public static String getLoginDeviceIdByToken(String tokenValue) {
return stpLogic.getLoginDeviceIdByToken(tokenValue);
}
/**