Ver código fonte

修复踢出用户时连自己也踢出的问题

tsurumure 2 semanas atrás
pai
commit
98add9901e

+ 4 - 4
src/main/java/com/backendsys/modules/material/service/impl/MaterialUserServiceImpl.java

@@ -144,10 +144,10 @@ public class MaterialUserServiceImpl implements MaterialUserService {
         userInfo.setStatus(materialAudit.getStatus());
         sysUserInfoDao.update(userInfo, wrapper);
 
-        // 如果是禁用状态,则清除该用户的登录信息
-        if (materialAudit.getStatus() == -1) {
-            sysUserService.kickUser(materialAudit.getUser_id());
-        }
+//        // 如果是禁用状态,则清除该用户的登录信息
+//        if (materialAudit.getStatus() == -1) {
+//            sysUserService.kickUser(materialAudit.getUser_id());
+//        }
 
         // [DB] 更新用户与角色关系 (先删,后增)
         LambdaQueryWrapper<SysUserRoleRelation> wrapperRoleRelation = new LambdaQueryWrapper<>();

+ 18 - 8
src/main/java/com/backendsys/modules/system/service/impl/SysUserServiceImpl.java

@@ -474,15 +474,25 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserDao, SysUser> impleme
             SysUserInfo sysUserInfo = sysUserInfoDao.selectOne(queryWrapper);
 
             if (sysUserInfo != null) {
-                // 删除旧的登录缓存
-                tokenUtil.deleteRedisLoginToken(sysUserInfo.getLast_login_uuid());
-                // 更新用户信息 (查询最后登录uuid,并清除)
-                Wrapper updateWrapper = new UpdateWrapper<SysUserInfo>().lambda().set(SysUserInfo::getLast_login_uuid, "").eq(SysUserInfo::getUser_id, user_id);
-                sysUserInfoDao.update(null, updateWrapper);
 
-                // [SSE] 发送退出登录的消息
-                String dataStr = (new SseResponse(SseResponseEnum.LOGOUT)).toJsonStr();
-                sseUtil.send(sysUserInfo.getUser_id(), dataStr);
+                // 判断 Token 是否存在
+                String uuid = sysUserInfo.getLast_login_uuid();
+                String tokenRedisKey = REDIS_LOGIN_TOKEN_PREFIX + uuid;
+                System.out.println("tokenRedisKey = " + tokenRedisKey);
+                Object isExist = redisUtil.getCacheObject(tokenRedisKey);
+
+                if (isExist != null) {
+                    // 删除旧的登录缓存
+                    tokenUtil.deleteRedisLoginToken(uuid);
+                    // 更新用户信息 (查询最后登录uuid,并清除)
+                    Wrapper updateWrapper = new UpdateWrapper<SysUserInfo>().lambda().set(SysUserInfo::getLast_login_uuid, "").eq(SysUserInfo::getUser_id, user_id);
+                    sysUserInfoDao.update(null, updateWrapper);
+
+                    // [SSE] 发送退出登录的消息
+                    String dataStr = (new SseResponse(SseResponseEnum.LOGOUT)).toJsonStr();
+                    sseUtil.send(sysUserInfo.getUser_id(), dataStr);
+                }
+
             }
 
             return Map.of("user_id", user_id);