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