新增 StpUtil.getLoginDeviceByToken(xxx) 方法,用于获取任意 token 的登录设备类型

This commit is contained in:
click33
2024-04-22 17:36:33 +08:00
parent 2a85f81dbc
commit d238eea60d
2 changed files with 35 additions and 9 deletions

View File

@@ -2089,19 +2089,32 @@ public class StpLogic {
* @return 当前令牌的登录设备类型
*/
public String getLoginDevice() {
// 1、如果前端没有提交 token直接返回 null
String tokenValue = getTokenValue();
if(tokenValue == null) {
return getLoginDeviceByToken(getTokenValue());
}
/**
* 返回指定 token 会话的登录设备类型
*
* @param tokenValue 指定token
* @return 当前令牌的登录设备类型
*/
public String getLoginDeviceByToken(String tokenValue) {
// 1、如果 token 为 null直接提前返回
if(SaFoxUtil.isEmpty(tokenValue)) {
return null;
}
// 2、如果当前会话还未登录,直接返回 null
if(!isLogin()) {
// 2、获取此 token 对应的 loginId如果为null或者此token已被冻结直接返回null
Object loginId = getLoginIdNotHandle(tokenValue);
if( ! isValidLoginId(loginId)) {
return null;
}
if(getTokenActiveTimeoutByToken(tokenValue) == SaTokenDao.NOT_VALUE_EXPIRE ) {
return null;
}
// 3、获取当前账号的 Account-Session
SaSession session = getSessionByLoginId(getLoginIdDefaultNull(), false);
// 3、获取这个账号的 Account-Session
SaSession session = getSessionByLoginId(loginId, false);
// 4、为 null 说明尚未登录,当然也就不存在什么设备类型,直接返回 null
if(session == null) {
@@ -2119,7 +2132,7 @@ public class StpLogic {
// 6、没有找到还是返回 null
return null;
}
// ------------------- 会话管理 -------------------

View File

@@ -16,10 +16,12 @@
package cn.dev33.satoken.stp;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.dao.SaTokenDao;
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.util.SaFoxUtil;
import java.util.List;
@@ -844,7 +846,18 @@ public class StpUtil {
return stpLogic.getLoginDevice();
}
/**
* 返回指定 token 会话的登录设备类型
*
* @param tokenValue 指定token
* @return 当前令牌的登录设备类型
*/
public static String getLoginDeviceByToken(String tokenValue) {
return stpLogic.getLoginDeviceByToken(tokenValue);
}
// ------------------- 会话管理 -------------------
/**