From 2c2d541aa1c5060b47c1ba5c6e3d192b2ff82fef Mon Sep 17 00:00:00 2001 From: zhoushihao <zsh19950802@163.com> Date: 星期日, 28 四月 2024 14:15:21 +0800 Subject: [PATCH] fixbug:权限功能实现用户重复登录异常 --- hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java | 47 ++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 44 insertions(+), 3 deletions(-) diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java index 001b1fa..c674fea 100644 --- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java +++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java @@ -9,6 +9,7 @@ import com.mes.common.utils.RedisUtil; import com.mes.menu.mapper.SysMenuMapper; import com.mes.role.entity.SysRole; +import com.mes.role.service.SysRoleService; import com.mes.userinfo.entity.LoginUser; import com.mes.userinfo.entity.SysUser; import com.mes.userinfo.entity.SysUserRole; @@ -35,6 +36,7 @@ import javax.annotation.Resource; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -61,7 +63,10 @@ @Resource private SysUserRoleService sysUserRoleService; - @Autowired + @Resource + private SysRoleService sysRoleService; + + @Resource BCryptPasswordEncoder passwordEncoder; @Override @@ -74,12 +79,12 @@ //浣跨敤userid鐢熸垚token LoginUser loginUser = (LoginUser) authenticate.getPrincipal(); String userId = loginUser.getUser().getId().toString(); - String jwt = JwtUtil.createJWT(userId); + String jwt = JwtUtil.generateToken(userId); //鏌ヨ鏉冮檺淇℃伅 // List<String> perms = sysMenuMapper.selectPermsByUserId(userId); //authenticate瀛樺叆redis - redisUtil.setCacheObject("login:" + userId, loginUser.getAuthorities()); + redisUtil.setCacheObject("login:" + userId, loginUser); //鎶妕oken鍝嶅簲缁欏墠绔� HashMap<String, String> map = new HashMap<>(); map.put("token", jwt); @@ -154,6 +159,42 @@ } + @Override + public List<String> getUserAuthorityInfo(Long userId) { + SysUser sysUser = baseMapper.selectById(userId); + + // ROLE_admin,ROLE_normal,sys:user:list,.... + String authority = ""; + if (redisUtil.hasKey("GrantedAuthority:" + sysUser.getUserName())) { + authority = redisUtil.getCacheObject("GrantedAuthority:" + sysUser.getUserName()); + + } else { + // 鑾峰彇瑙掕壊缂栫爜 + List<SysRole> roles = sysRoleService.list(new QueryWrapper<SysRole>() + .inSql("id", "select role_id from sys_user_role where user_id = " + userId)); + + if (roles.size() > 0) { + String roleCodes = roles.stream().map(r -> "ROLE_" + r.getRoleKey()).collect(Collectors.joining(",")); + authority = roleCodes.concat(","); + } + + // 鑾峰彇鑿滃崟鎿嶄綔缂栫爜 + List<String> perms = sysMenuMapper.selectPermsByUserId(userId); + if (perms.size() > 0) { + String menuPerms = String.join(",", perms); + authority = authority.concat(menuPerms); + } + + redisUtil.setCacheObject("GrantedAuthority:" + sysUser.getUserName(), authority, 60 * 60, TimeUnit.SECONDS); + } + return Arrays.stream(authority.split(",")).collect(Collectors.toList()); + } + + @Override + public void clearUserAuthorityInfoByMenuId(Long userId) { + + } + /** * 瀹炵幇UserDetailsService鎺ュ彛锛屼粠鏁版嵁搴撳唴鑾峰彇鐢ㄦ埛鍙婃潈闄愪俊鎭� * -- Gitblit v1.8.0