From b9c9e52187fd8f47218ddefa514987c59d98f72c Mon Sep 17 00:00:00 2001 From: hjl <1657978663@qq.com> Date: 星期四, 20 六月 2024 11:25:07 +0800 Subject: [PATCH] fix: 学习端bug --- ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java | 24 ++++++++++++++++-------- 1 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java index 275d931..963d895 100644 --- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java +++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java @@ -145,7 +145,7 @@ public LoginUserParent getLoginUserStudy() { LoginUserParent userStudy = getLoginUserStudy(ServletUtils.getRequest()); if (null == userStudy) { - throw new StudyLoginException("登录失效,请重新登录!", 505); + throw new StudyLoginException("登录失效,请重新登录!", 600); } return userStudy; } @@ -219,14 +219,18 @@ if (StringUtils.isNotEmpty(token)) { String userkey = JwtUtils.getUserKeyStudy(token); user = redisService.getCacheObject(getTokenKeyStudy(userkey)); - // 优先判断当前账号是否已在其他设备登录 - if (!user.getIsCanLogin()) { - throw new StudyLoginException("当前登录账号在其他设备登录!", 505); - } // 再次判断登录状态是否已过期 - if (System.currentTimeMillis() > user.getExpireTime()) { - throw new StudyLoginException("登录信息已过期,请重新登录!", 504); - } +// if (null == user) { +// throw new StudyLoginException("登录信息已过期,请重新登录!", 504); +// } +// // 优先判断当前账号是否已在其他设备登录 +// if (!user.getIsCanLogin()) { +// throw new StudyLoginException("当前登录账号在其他设备登录!", 505); +// } +// // 再次判断登录状态是否已过期 +// if (System.currentTimeMillis() > user.getExpireTime()) { +// throw new StudyLoginException("登录信息已过期,请重新登录!", 504); +// } return user; } return user; @@ -345,6 +349,10 @@ LoginUserParent redisUserInfo = JSONObject.parseObject(JSONObject.toJSONString(redisCacheUserInfo), LoginUserParent.class); // 单点逻辑,如果当前用户已处于登录状态并再次登录,则清除该用户上一次登录token if (dto.getUserid().equals(redisUserInfo.getUserid())) { + // 被挤账户 可登录状态 已经为 false时,跳出循环 + if (!redisUserInfo.getIsCanLogin()) { + continue; + } // 设置能否登录字段为 否,当该token登录时,isCanLogin为false表示账号被挤 redisUserInfo.setIsCanLogin(Boolean.FALSE); redisService.setCacheObject(strKey, redisUserInfo, redisService.getExpire(strKey), TimeUnit.SECONDS); -- Gitblit v1.7.1