From 53fc674f4adb8cdcf768b83e70d09d91d447bfe6 Mon Sep 17 00:00:00 2001 From: Billy <378012098@qq.com> Date: Wed, 2 Jul 2025 15:56:37 +0800 Subject: [PATCH] =?UTF-8?q?fix(monitor/online):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BA=86=E5=9C=A8=E8=BF=87=E6=BB=A4=E6=97=A0=E6=95=88=20token?= =?UTF-8?q?=20=E6=97=B6=EF=BC=8C=E6=B2=A1=E6=9C=89=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AF=B9StpUtil.getLoginIdByToken=20=E8=BF=94=E5=9B=9E=20null?= =?UTF-8?q?=E6=83=85=E5=86=B5=E5=A4=84=E7=90=86=EF=BC=8C=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=20=E6=89=A7=E8=A1=8C=20groupingBy=20=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/OnlineUserServiceImpl.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/continew-system/src/main/java/top/continew/admin/auth/service/impl/OnlineUserServiceImpl.java b/continew-system/src/main/java/top/continew/admin/auth/service/impl/OnlineUserServiceImpl.java index 68b531f2..00529fa9 100644 --- a/continew-system/src/main/java/top/continew/admin/auth/service/impl/OnlineUserServiceImpl.java +++ b/continew-system/src/main/java/top/continew/admin/auth/service/impl/OnlineUserServiceImpl.java @@ -62,13 +62,26 @@ public class OnlineUserServiceImpl implements OnlineUserService { List list = new ArrayList<>(); // 查询所有在线 Token List tokenKeyList = StpUtil.searchTokenValue(StringConstants.EMPTY, 0, -1, false); - Map> tokenMap = tokenKeyList.stream().filter(tokenKey -> { - String token = StrUtil.subAfter(tokenKey, StringConstants.COLON, true); - // 忽略已过期或失效 Token - return StpUtil.getStpLogic().getTokenActiveTimeoutByToken(token) >= SaTokenDao.NEVER_EXPIRE; - }) - .map(tokenKey -> StrUtil.subAfter(tokenKey, StringConstants.COLON, true)) - .collect(Collectors.groupingBy(token -> Convert.toLong(StpUtil.getLoginIdByToken(token)))); + Map> tokenMap = tokenKeyList.stream() + // 提前映射,避免重复调用 + .map(tokenKey -> StrUtil.subAfter(tokenKey, StringConstants.COLON, true)) + .map(token -> { + Object loginIdObj = StpUtil.getLoginIdByToken(token); + long tokenTimeout = StpUtil.getStpLogic().getTokenActiveTimeoutByToken(token); + // 将相关信息打包成对象或简单的Entry对,便于后续过滤与归类 + return new AbstractMap.SimpleEntry<>(token, new AbstractMap.SimpleEntry<>(loginIdObj, tokenTimeout)); + }) + // 过滤出未过期且loginId存在的Token + .filter(entry -> { + Object loginIdObj = entry.getValue().getKey(); + long tokenTimeout = entry.getValue().getValue(); + return loginIdObj != null && tokenTimeout >= SaTokenDao.NEVER_EXPIRE; + }) + // 此时数据都有效,进行收集 + .collect(Collectors.groupingBy( + entry -> Convert.toLong(entry.getValue().getKey()), + Collectors.mapping(AbstractMap.SimpleEntry::getKey, Collectors.toList())) + ); // 筛选数据 for (Map.Entry> entry : tokenMap.entrySet()) { Long userId = entry.getKey();