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

View File

@ -678,6 +678,15 @@ public class StpUtil {
stpLogic.checkActiveTimeout(); stpLogic.checkActiveTimeout();
} }
/**
* 获取当前 token 的最后活跃时间13位时间戳如果不存在则返回 -2
*
* @return /
*/
public static long getTokenLastActiveTime() {
return stpLogic.getTokenLastActiveTime();
}
// ------------------- 过期时间相关 ------------------- // ------------------- 过期时间相关 -------------------
@ -1010,6 +1019,25 @@ public class StpUtil {
stpLogic.forEachTerminalList(loginId, function); 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 / * @return /
*/ */
public static long getTokenLastActiveTime() { public static String getLoginDeviceId() {
return stpLogic.getTokenLastActiveTime(); return stpLogic.getLoginDeviceId();
}
/**
* 返回指定 token 会话的登录设备 ID
*
* @param tokenValue 指定token
* @return /
*/
public static String getLoginDeviceIdByToken(String tokenValue) {
return stpLogic.getLoginDeviceIdByToken(tokenValue);
} }
/** /**