Procházet zdrojové kódy

记录登录者全部token

lyhzzz před 1 rokem
rodič
revize
3a709a5258

+ 1 - 0
src/main/java/com/fdkankan/manage/common/RedisKeyUtil.java

@@ -8,6 +8,7 @@ public class RedisKeyUtil {
     public static final String loginNum= "manage:login:userName:%s:ip:%s";
 
     public static final String loginToken= "manage:login:token:%s";
+    public static final String loginUserName= "manage:login:userName:%s";
 
 
 }

+ 12 - 2
src/main/java/com/fdkankan/manage/config/SaTokenConfigure.java

@@ -18,6 +18,7 @@ import com.fdkankan.manage.common.ResultCode;
 import com.fdkankan.manage.exception.BusinessException;
 import com.fdkankan.manage.common.ResultData;
 import com.fdkankan.manage.service.ISysMenuService;
+import com.fdkankan.manage.vo.response.ManageLoginResponse;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -118,10 +119,19 @@ public class SaTokenConfigure {
     }
 
     private void checkLogin(){
-        if(!redisUtil.hasKey(String.format(RedisKeyUtil.loginToken,StpUtil.getTokenValue()))){
+        String redisKey = String.format(RedisKeyUtil.loginToken,StpUtil.getTokenValue());
+        if(!redisUtil.hasKey(redisKey)){
             throw new BusinessException(ResultCode.USER_NOT_LOGIN);
         }
-        redisUtil.expire(String.format(RedisKeyUtil.loginToken,StpUtil.getTokenValue()),21600);
+        String userStr = redisUtil.get(redisKey);
+        ManageLoginResponse result = JSONObject.parseObject(userStr,ManageLoginResponse.class);
+        Long userId = result.getUserId();
+        if(userId == null || result.getStatus() == 0){
+            redisUtil.del(redisKey);
+            throw new BusinessException(ResultCode.USERNAME_ERROR);
+        }
+
+        redisUtil.expire(redisKey,21600);
         StpUtil.checkLogin();
     }
 

+ 0 - 4
src/main/java/com/fdkankan/manage/controller/SysUserController.java

@@ -37,10 +37,6 @@ public class SysUserController  extends BaseController{
     public ResultData getInfo(){
         String loginId = (String) StpUtil.getLoginId();
         SysUser sysUser = sysUserService.getById(Long.valueOf(loginId));
-        if(sysUser.getStatus() == 0){
-            manageService.logout();
-            throw new BusinessException(ResultCode.USERNAME_ERROR);
-        }
         SysUserVo userVo = new SysUserVo();
         SysRole role = sysRoleService.getById(sysUser.getRoleId());
         userVo.setRoleId(role.getId());

+ 22 - 1
src/main/java/com/fdkankan/manage/service/impl/ManageService.java

@@ -65,7 +65,12 @@ public class ManageService {
                 .setExtra("nickName",result.getNickName()));
         result.setToken(StpUtil.getTokenValue());
         result.setUserId(user.getId());
-        redisUtil.set(String.format(RedisKeyUtil.loginToken ,result.getToken()), JSONObject.toJSONString(result), 216000);
+        redisUtil.set(String.format(RedisKeyUtil.loginToken ,result.getToken()), JSONObject.toJSONString(result), 2*60*60);
+
+        String redisUserNameKey = String.format(RedisKeyUtil.loginUserName, userName);
+
+        redisUtil.lRightPush(redisUserNameKey,result.getToken());
+
         return result;
     }
 
@@ -104,4 +109,20 @@ public class ManageService {
         }
     }
 
+    public void updateLoginUserStatus(String userName,Integer status) {
+        String redisUserNameKey = String.format(RedisKeyUtil.loginUserName, userName);
+
+        List<String> list = redisUtil.hgetValues(redisUserNameKey);
+        if(list != null && list.size() >0){
+            for (String token : list) {
+                String redisKey = String.format(RedisKeyUtil.loginToken, token);
+                String userStr = redisUtil.get(redisKey);
+                ManageLoginResponse result = JSONObject.parseObject(userStr,ManageLoginResponse.class);
+                result.setStatus(status);
+                redisUtil.set(redisKey,JSONObject.toJSONString(result), 2*60*60);
+            }
+        }
+
+
+    }
 }

+ 9 - 4
src/main/java/com/fdkankan/manage/service/impl/UserServiceImpl.java

@@ -2,18 +2,17 @@ package com.fdkankan.manage.service.impl;
 import java.util.Date;
 import java.util.*;
 
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.common.util.Base64Converter;
 import com.fdkankan.common.util.SecurityUtil;
-import com.fdkankan.manage.common.CacheUtil;
-import com.fdkankan.manage.common.OssPath;
-import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.common.*;
 import com.fdkankan.manage.entity.*;
 import com.fdkankan.manage.exception.BusinessException;
-import com.fdkankan.manage.common.PageInfo;
 import com.fdkankan.manage.httpClient.service.LaserService;
 import com.fdkankan.manage.mapper.IUserMapper;
 import com.fdkankan.manage.service.*;
@@ -22,7 +21,9 @@ import com.fdkankan.manage.util.Dateutils;
 import com.fdkankan.manage.vo.request.SceneParam;
 import com.fdkankan.manage.vo.request.UserIncrementParam;
 import com.fdkankan.manage.vo.request.UserParam;
+import com.fdkankan.manage.vo.response.ManageLoginResponse;
 import com.fdkankan.manage.vo.response.UserVo;
+import com.fdkankan.redis.util.RedisUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -63,6 +64,8 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
     private IJyUserService jyUserService;
     @Autowired
     private IJySceneUserAuthService jySceneUserAuthService;
+    @Autowired
+    ManageService manageService;
 
     @Override
     public PageInfo pageList(UserParam param) {
@@ -265,6 +268,8 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
             //将相机和场景归属超管
             cameraDetailService.giveSuperAdmin(jyuser.getUserId());
         }
+        manageService.updateLoginUserStatus(jyuser.getRyNo(),userParam.getStatus());
+
         LambdaUpdateWrapper<SysUser> wrapper = new LambdaUpdateWrapper<>();
         wrapper.eq(SysUser::getId,jyuser.getSysUserId());
         wrapper.set(SysUser::getStatus,userParam.getStatus());