From d238eea60d8a10ab0049b50bb777024e346ccc46 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Mon, 22 Apr 2024 17:36:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20StpUtil.getLoginDeviceByTo?= =?UTF-8?q?ken(xxx)=20=E6=96=B9=E6=B3=95=EF=BC=8C=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=BB=BB=E6=84=8F=20token=20=E7=9A=84?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E8=AE=BE=E5=A4=87=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/dev33/satoken/stp/StpLogic.java | 29 ++++++++++++++----- .../java/cn/dev33/satoken/stp/StpUtil.java | 15 +++++++++- 2 files changed, 35 insertions(+), 9 deletions(-) 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 6acd88e7..b25f66a4 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 @@ -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; } - + // ------------------- 会话管理 ------------------- 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 57334edd..8def64bf 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,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); + } + + + // ------------------- 会话管理 ------------------- /**