From f991c73f56f35665bcbe8ce2252c04ea82032b10 Mon Sep 17 00:00:00 2001 From: hjl <1657978663@qq.com> Date: 星期一, 27 五月 2024 18:06:31 +0800 Subject: [PATCH] feat: 修复登录bug;数据校验规则优化 --- ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java | 10 +++++++++- 1 files changed, 9 insertions(+), 1 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..ca27eae 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("登录失效,请重新登录!", 504); } return userStudy; } @@ -219,6 +219,10 @@ if (StringUtils.isNotEmpty(token)) { String userkey = JwtUtils.getUserKeyStudy(token); user = redisService.getCacheObject(getTokenKeyStudy(userkey)); + // 再次判断登录状态是否已过期 + if (null == user) { + throw new StudyLoginException("登录信息已过期,请重新登录!", 504); + } // 优先判断当前账号是否已在其他设备登录 if (!user.getIsCanLogin()) { throw new StudyLoginException("当前登录账号在其他设备登录!", 505); @@ -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