浏览代码

强制用户退出

wuweihao 3 年之前
父节点
当前提交
a67ae92a9b

+ 3 - 2
gis_admin/src/main/java/com/gis/admin/controller/LoginController.java

@@ -6,6 +6,7 @@ import com.gis.common.base.entity.po.LogEntity;
 import com.gis.common.base.exception.BaseRuntimeException;
 import com.gis.common.base.service.LogService;
 import com.gis.common.constant.ConfigConstant;
+import com.gis.common.constant.TypeCode;
 import com.gis.common.util.*;
 import com.gis.admin.entity.po.SysUserEntity;
 import com.gis.admin.service.SysRoleService;
@@ -112,8 +113,8 @@ public class LoginController {
 
         // 保存操作日志
         saveLog(userId);
-
-        redisUtil.setEx(configConstant.redisPrefix + token, token, 23, TimeUnit.HOURS);
+        String loginKey = configConstant.redisPrefix + TypeCode.LOGIN_USER_KEY + userId;
+        redisUtil.setEx(loginKey, token, 23, TimeUnit.HOURS);
 
 
         return Result.success(result);

+ 33 - 8
gis_admin/src/main/java/com/gis/admin/service/impl/SysUserServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gis.admin.entity.dto.ResetPasswordDto;
 import com.gis.common.base.entity.dto.PageDateDto;
 import com.gis.common.base.exception.BaseRuntimeException;
+import com.gis.common.constant.ConfigConstant;
 import com.gis.common.constant.TypeCode;
 import com.gis.common.util.*;
 import com.gis.admin.entity.dto.PasswordDto;
@@ -17,6 +18,7 @@ import com.gis.admin.entity.dto.RegisterDto;
 import com.gis.admin.entity.po.SysUserEntity;
 import com.gis.admin.mapper.SysUserMapper;
 import com.gis.admin.service.SysUserService;
+import com.google.common.collect.ImmutableList;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +27,7 @@ import org.springframework.stereotype.Service;
 import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDateTime;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -45,6 +48,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     @Autowired
     RedisUtil redisUtil;
 
+    @Autowired
+    ConfigConstant configConstant;
+
 
     /**重置密码redis key*/
     final static String RESET_PASSWORD_KEY = "reset:password:";
@@ -137,15 +143,28 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
                 log.error("管理员账户不能删除 {}", entity.getId());
                 return Result.failure("管理员账户不能删除");
             }
-//            entity.setIsDelete(1);
-//            entity.setUpdateTime(LocalDateTime.now());
-//            this.update(entity);
         }
         this.removeByIds(idList);
 
+        // 强制用户退出
+        delRedisByUserIds(idList);
+
         return Result.success();
     }
 
+
+    /**
+     * 删除登录用户redis login key
+     * 强制用户退出
+     * @param ids
+     */
+    private void delRedisByUserIds(List<String> ids){
+        for (String id : ids) {
+            String loginKey = configConstant.redisPrefix + TypeCode.LOGIN_USER_KEY + id;
+            redisUtil.delete(loginKey);
+        }
+    }
+
     @Override
     public Result<SysUserEntity> search(PageDateDto param) {
         BaseUtil.startPage(param);
@@ -153,9 +172,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
         IPage<SysUserEntity> page = new Page<>(param.getPageNum() , param.getPageSize());
         LambdaQueryWrapper<SysUserEntity> wrapper = new LambdaQueryWrapper<>();
 
-//            wrapper.eq(SysUserEntity::getIsEnabled, 1);
-
-
         String startTime = param.getStartTime();
         String endTime = param.getEndTime();
         if (StrUtil.isNotBlank(startTime) || StrUtil.isNotBlank(endTime)){
@@ -185,7 +201,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
         param.setOldPassword(oldPassword);
         SysUserEntity user = this.findByUserName(JwtUtil.getUsername(request.getHeader("token")));
         updatePwd(param, user, true);
-//        updatePassword(param);
         return Result.success();
     }
 
@@ -202,7 +217,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
 
         user.setPassword(PasswordUtils.encrypt(user.getUserName(), param.getNewPassword(), PasswordUtils.getStaticSalt()));
         user.setUpdateTime(LocalDateTime.now());
-//        this.saveOrUpdate(user);
         this.updateById(user);
     }
 
@@ -235,12 +249,23 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
             return Result.failure("管理员账户不能停用/注销");
         }
 
+
+
         user.setIsEnabled(isEnabled);
         user.setUpdateTime(LocalDateTime.now());
         this.updateById(user);
+
+        // 禁用, 强制用户退出
+        if (isEnabled==0){
+            delRedisByUserIds(Collections.singletonList(id.toString()));
+        }
+
         return Result.success();
     }
 
+
+
+
     @Override
     public Result register(RegisterDto param) {
         if (!param.getPassword().equals(param.getVerifyPassword())) {

+ 5 - 2
gis_admin/src/main/java/com/gis/admin/shiro/ShiroRealm.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import com.gis.common.constant.ConfigConstant;
 import com.gis.common.constant.SysEnum;
+import com.gis.common.constant.TypeCode;
 import com.gis.common.util.JwtUtil;
 import com.gis.admin.entity.po.SysUserEntity;
 import com.gis.admin.service.SysUserService;
@@ -126,7 +127,9 @@ public class ShiroRealm extends AuthorizingRealm {
             throw new JwtAuthenticationException(5001, "token invalid");
         }
 
-        String redisToken = redisUtil.getCacheObject(configConstant.redisPrefix + token);
+        Long userId = JwtUtil.getUserId(token);
+        String loginKey = configConstant.redisPrefix + TypeCode.LOGIN_USER_KEY + userId;
+        String redisToken = redisUtil.getCacheObject(loginKey);
 
         if (!token.equals(redisToken)) {
             log.error("redis token is null");
@@ -139,7 +142,7 @@ public class ShiroRealm extends AuthorizingRealm {
             throw new JwtAuthenticationException(5001, "token invalid");
         }
 
-        SysUserEntity userEntity = sysUserService.cacheById(JwtUtil.getUserId(token));
+        SysUserEntity userEntity = sysUserService.cacheById(userId);
         if (userEntity == null) {
             log.error("error token userEntity");
             throw new JwtAuthenticationException(5001, "User didn't existed!");

+ 3 - 3
gis_cms/src/main/java/com/gis/cms/controller/ContentController.java

@@ -6,6 +6,7 @@ import com.gis.cms.service.ContentService;
 import com.gis.cms.service.FileService;
 import com.gis.cms.service.MenuService;
 import com.gis.cms.service.VillageService;
+import com.gis.common.base.aop.WebControllerLog;
 import com.gis.common.util.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -36,15 +37,14 @@ public class ContentController {
         return contentService.getList(villageId, menuId);
     }
 
-
+    @WebControllerLog(description = "内容管理-编辑",addDb = true)
     @ApiOperation(value = "新增|编辑")
     @PostMapping("/saveEntity")
     public Result saveEntity(@Valid @RequestBody ContentDto param){
         return contentService.saveEntity(param);
     }
 
-
-
+    @WebControllerLog(description = "内容管理-删除",addDb = true)
     @ApiOperation(value = "删除")
     @PostMapping("/removes/{ids}")
     public Result removes(@PathVariable String ids){

+ 3 - 0
gis_common/src/main/java/com/gis/common/constant/TypeCode.java

@@ -25,6 +25,9 @@ public class TypeCode {
     /**redis 用户 */
     public static  final String USER_KEY = "user_";
 
+    /**redis 登录用户 */
+    public static  final String LOGIN_USER_KEY = "login:";
+