From 53155df41c5cce8f7be814a25148efe9a7ea25c5 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 17 七月 2024 09:06:20 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java                              |   14 ++++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuthClient.java            |   22 +++++++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java          |   18 +++++
 ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java      |   14 ++++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java       |   16 ----
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuthFallbackFactory.java       |   20 ++++++
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java |   30 ++++++---
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java      |    4 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java          |   22 ++-----
 9 files changed, 117 insertions(+), 43 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuthFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuthFallbackFactory.java
new file mode 100644
index 0000000..fcdf00d
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuthFallbackFactory.java
@@ -0,0 +1,20 @@
+package com.ruoyi.system.api.factory;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.feignClient.AuthClient;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class AuthFallbackFactory implements FallbackFactory<AuthClient> {
+
+    @Override
+    public AuthClient create(Throwable cause) {
+        return new AuthClient() {
+            @Override
+            public R<?> logout(String token, String source) {
+                return R.fail("强制下线失败:" + cause.getMessage());
+            }
+        };
+    }
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuthClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuthClient.java
new file mode 100644
index 0000000..1cd1b98
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuthClient.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.api.feignClient;
+
+import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.common.core.constant.ServiceNameConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.factory.AuthFallbackFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author mitao
+ * @date 2024/7/16
+ */
+@FeignClient(contextId = "authClient", value = ServiceNameConstants.AUTH_SERVICE, fallbackFactory = AuthFallbackFactory.class)
+public interface AuthClient {
+
+    @GetMapping("/inner/logout")
+    R<?> logout(@RequestParam("token") String token,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+}
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
index 8bdb915..0147965 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -12,6 +12,7 @@
 import com.ruoyi.common.core.utils.JwtUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.annotation.InnerAuth;
 import com.ruoyi.common.security.auth.AuthUtil;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
@@ -130,6 +131,19 @@
         return R.ok();
     }
 
+    @InnerAuth
+    @GetMapping("/inner/logout")
+    @ApiOperation(value = "设置用户token失效")
+    public R<?> logout(@RequestParam("") String token) {
+        if (StringUtils.isNotEmpty(token)) {
+            String username = JwtUtils.getUserName(token);
+            // 删除用户缓存记录
+            AuthUtil.logoutByToken(token);
+            // 记录用户退出日志
+            sysLoginService.logout(username);
+        }
+        return R.ok();
+    }
     @PostMapping("refresh")
     @ApiOperation(value = "管理后台-刷新令牌有效期")
     public R<?> refresh(HttpServletRequest request)
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
index 2ccbc5c..7715977 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
@@ -31,6 +31,10 @@
      * 权限缓存前缀
      */
     public final static String LOGIN_TOKEN_KEY = "login_tokens:";
+    /**
+     * 用户token key
+     */
+    public final static String USER_TOKEN_KEY = "user_token_key:";
 
     /**
      * 验证码 redis key
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java
index 60daf6d..63f42e5 100644
--- a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java
@@ -4,6 +4,7 @@
 import org.redisson.Redisson;
 import org.redisson.api.RedissonClient;
 import org.redisson.config.Config;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.AutoConfigureBefore;
 import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
 import org.springframework.cache.annotation.CachingConfigurerSupport;
@@ -25,6 +26,10 @@
 @AutoConfigureBefore(RedisAutoConfiguration.class)
 public class RedisConfig extends CachingConfigurerSupport
 {
+
+    @Value("${spring.profiles.active:dev}")
+    private String env;
+
     @Bean
     @SuppressWarnings(value = { "unchecked", "rawtypes" })
     public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
@@ -61,7 +66,14 @@
         // 集群模式
         // config.useClusterServers().addNodeAddress("192.168.110.188:7004", "192.168.110.188:7001");
         // 2.根据 Config 创建出 RedissonClient 示例。
-        config.useSingleServer().setAddress("redis://192.168.110.188:6379").setPassword("123456");
+// 根据当前环境设置address
+        if (env.equals("dev")) {
+            config.useSingleServer().setAddress("redis://192.168.110.188:6379")
+                    .setPassword("123456");
+        } else if (env.equals("prod")) {
+            config.useSingleServer().setAddress("redis://127.0.0.1:6379")
+                    .setPassword("DZaDDhN6tp");
+        }
         return Redisson.create(config);
     }
 
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 19d9c4e..fa89da8 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
@@ -1,15 +1,7 @@
 package com.ruoyi.common.security.service;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import javax.servlet.http.HttpServletRequest;
-
-import com.ruoyi.common.core.constant.Constants;
-import com.ruoyi.system.api.domain.AppMiniLoginVO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 import com.ruoyi.common.core.constant.CacheConstants;
+import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.utils.JwtUtils;
 import com.ruoyi.common.core.utils.ServletUtils;
@@ -18,7 +10,14 @@
 import com.ruoyi.common.core.utils.uuid.IdUtils;
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.system.api.domain.AppMiniLoginVO;
 import com.ruoyi.system.api.model.LoginUser;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import javax.servlet.http.HttpServletRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 /**
  * token验证处理
@@ -39,6 +38,8 @@
     private final static long EXPIRE_TIME = CacheConstants.EXPIRATION;
 
     private final static String ACCESS_TOKEN = CacheConstants.LOGIN_TOKEN_KEY;
+
+    private final static String USER_TOKEN_KEY = CacheConstants.USER_TOKEN_KEY;
 
     private final static Long MILLIS_MINUTE_TEN = CacheConstants.REFRESH_TIME * MILLIS_MINUTE;
 
@@ -64,8 +65,12 @@
 
         // 接口返回信息
         Map<String, Object> rspMap = new HashMap<String, Object>();
-        rspMap.put("access_token", JwtUtils.createToken(claimsMap));
+        String accessToken = JwtUtils.createToken(claimsMap);
+        rspMap.put("access_token", accessToken);
         rspMap.put("expires_in", EXPIRE_TIME);
+        String userTokenKey = getUserTokenKey(loginUser.getUserid());
+        redisService.setCacheObject(userTokenKey, accessToken, EXPIRE_TIME,
+                TimeUnit.MINUTES);
         return rspMap;
     }
 
@@ -200,6 +205,7 @@
         {
             String userkey = JwtUtils.getUserKey(token);
             redisService.deleteObject(getTokenKey(userkey));
+            redisService.deleteObject(getUserTokenKey(Long.valueOf(JwtUtils.getUserId(token))));
         }
     }
 
@@ -236,4 +242,8 @@
     {
         return ACCESS_TOKEN + token;
     }
+
+    private String getUserTokenKey(Long userId) {
+        return USER_TOKEN_KEY + userId;
+    }
 }
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
index a36beac..32a4833 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
@@ -128,7 +128,7 @@
         SysRole role = new SysRole();
         role.setRoleName(dto.getRoleName());
         long count = roleService.count(Wrappers.lambdaQuery(SysRole.class)
-                .eq(SysRole::getRoleName, dto.getRoleName()));
+                .eq(SysRole::getRoleName, dto.getRoleName()).eq(SysRole::getDelFlag, "0"));
         if(count>0){
             return AjaxResult.error("角色已存在,请重新输入");
         }
@@ -247,7 +247,9 @@
     {
         SysRole role = new SysRole();
         role.setRoleName(dto.getRoleName());
-        SysRole one = roleService.getOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleId, dto.getRoleId()));
+        SysRole one = roleService.getOne(
+                new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleId, dto.getRoleId())
+                        .eq(SysRole::getDelFlag, "0"));
         List<SysRole> sysRoles = roleService.isExitUpdate(dto.getRoleName(), dto.getRoleId());
         if(sysRoles.size()>0){
             return AjaxResult.error("角色已存在,请重新输入");
@@ -260,20 +262,8 @@
         ArrayList<SysRoleMenu> sysRoleMenus = new ArrayList<>();
         List<Long> menuIds = dto.getMenuIds();
         // 移除原来的权限菜单
-        if(menuIds.contains(1061L)){
-            sysRoleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>()
-                    .eq(SysRoleMenu::getRoleId,dto.getRoleId()));
-        }else {
-            sysRoleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>()
-                    .eq(SysRoleMenu::getRoleId,dto.getRoleId())
-                    .ne(SysRoleMenu::getMenuId,1061L)
-                    .ne(SysRoleMenu::getMenuId,1062L)
-                    .ne(SysRoleMenu::getMenuId,1065L)
-                    .ne(SysRoleMenu::getMenuId,1073L)
-                    .ne(SysRoleMenu::getMenuId,1161L)
-                    .ne(SysRoleMenu::getMenuId,1203L)
-            );
-        }
+        sysRoleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>()
+                .eq(SysRoleMenu::getRoleId, dto.getRoleId()));
         for (Long menuId : menuIds) {
             SysRoleMenu sysRoleMenu = new SysRoleMenu();
             sysRoleMenu.setMenuId(menuId);
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
index 8b1697f..2fb3073 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.core.constant.CacheConstants;
+import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -13,12 +15,14 @@
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.annotation.InnerAuth;
 import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.system.api.domain.SysDept;
 import com.ruoyi.system.api.domain.SysRole;
 import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.AuthClient;
 import com.ruoyi.system.api.model.LoginUser;
 import com.ruoyi.system.api.validate.InsertGroup;
 import com.ruoyi.system.api.validate.UpdateGroup;
@@ -94,6 +98,10 @@
 
     @Autowired
     private ISysUserRoleService sysUserRoleService;
+    @Autowired
+    private AuthClient authClient;
+    @Autowired
+    private RedisService redisService;
     /**
      * 获取用户列表
      */
@@ -116,7 +124,7 @@
     public AjaxResult add(@Validated(InsertGroup.class) @RequestBody SysUserDTO dto) {
         SysUser user = BeanUtils.copyBean(dto, SysUser.class);
         user.setUserId(null);
-        user.setUserType(dto.getIsAuctioneer() == 1 ? "00" : "04");
+        user.setUserType(dto.getIsAuctioneer() == 1 ? "00" : "01");
         user.setUserName(user.getPhonenumber());
         if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){
             user.setNickName(user.getPhonenumber());
@@ -195,6 +203,7 @@
         if (user.getPhonenumber() != null) {
             user.setUserName(user.getPhonenumber());
         }
+        user.setUserType(dto.getIsAuctioneer() == 1 ? "00" : "01");
         user.setPassword(null);
         user.setUpdateBy(SecurityUtils.getUsername());
         user.setUpdateTime(new Date());
@@ -225,12 +234,18 @@
         SysUser sysUser = userService.selectUserById(userId);
         if (sysUser.getStatus().equals("0")) {
             sysUser.setStatus("1");
+
+            Object tokenObj = redisService.getCacheObject(getUserTokenKey(userId));
+            authClient.logout(tokenObj.toString(), SecurityConstants.INNER);
         } else {
             sysUser.setStatus("0");
         }
         return toAjax(userService.updateUser(sysUser));
     }
 
+    private String getUserTokenKey(Long userId) {
+        return CacheConstants.USER_TOKEN_KEY + userId;
+    }
 
     @Autowired
     private ISysUserRoleService iSysUserRoleService;
@@ -368,7 +383,6 @@
     /**
      * 重置密码
      */
-    @RequiresPermissions("system:user:edit")
     @ApiOperation("重置密码")
     @Log(title = "用户管理", businessType = BusinessType.UPDATE)
     @PostMapping("/resetPwd")
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
index e6fbbde..dada878 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.ruoyi.common.core.constant.UserConstants;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.SpringUtils;
@@ -296,20 +297,7 @@
         // 新增用户与角色管理
         List<SysRoleMenu> list = new ArrayList<SysRoleMenu>();
         Long[] menuIds = role.getMenuIds();
-//        List<Long> longs = Arrays.asList(menuIds);
-        List<Long> longs = new ArrayList<>();
-        for (Long menuId : menuIds) {
-            longs.add(menuId);
-        }
-        if(!longs.contains(1061L)){
-            longs.add(1061L);
-            longs.add(1062L);
-            longs.add(1065L);
-            longs.add(1073L);
-            longs.add(1161L);
-            longs.add(1203L);
-        }
-
+        List<Long> longs = Lists.newArrayList(menuIds);
         for (Long menuId : longs)
         {
             SysRoleMenu rm = new SysRoleMenu();

--
Gitblit v1.7.1