From 3e0cb7396a2b8a66ea172701389f8f9d1e8e95a4 Mon Sep 17 00:00:00 2001 From: root <13910913995@163.com> Date: Fri, 20 Jun 2025 10:32:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=86=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stdproject/controller/UserController.java | 6 +- .../java/com/stdproject/entity/LoginUser.java | 10 ++- .../service/CustomUserDetailsService.java | 61 +++---------------- 3 files changed, 21 insertions(+), 56 deletions(-) diff --git a/backend/src/main/java/com/stdproject/controller/UserController.java b/backend/src/main/java/com/stdproject/controller/UserController.java index fc8c1d5..c989989 100644 --- a/backend/src/main/java/com/stdproject/controller/UserController.java +++ b/backend/src/main/java/com/stdproject/controller/UserController.java @@ -199,7 +199,7 @@ private Long jwtExpirationMs; @PostMapping("/login") @ResponseBody - public ResponseResult login(String username, String password) throws Exception { + public ResponseResult login(String username, String password) { try { // 密码解密 String encrypt_password = RsaUtils.decryptByPrivateKey(privateKey, password); @@ -256,6 +256,10 @@ private Long jwtExpirationMs; } catch (AuthenticationException e) { // 捕获其他认证异常 return ResponseResult.error("认证失败:" + e.getMessage()); + } catch (Exception e) { + // 捕获其他认证异常 + System.out.printf("登录错误异常!"); + return ResponseResult.error("认证失败:" + e.getMessage()); } } @PostMapping("/logout") diff --git a/backend/src/main/java/com/stdproject/entity/LoginUser.java b/backend/src/main/java/com/stdproject/entity/LoginUser.java index 7d8d8e4..f14f819 100644 --- a/backend/src/main/java/com/stdproject/entity/LoginUser.java +++ b/backend/src/main/java/com/stdproject/entity/LoginUser.java @@ -18,9 +18,9 @@ public class LoginUser implements UserDetails { private User user; - private Collection permissions; + private List permissions; - public LoginUser(User user, Collection permissions) { + public LoginUser(User user, List permissions) { this.user = user; this.permissions = permissions; } @@ -28,9 +28,13 @@ public class LoginUser implements UserDetails { @JSONField(serialize = false) private List authorities; + public List getPermissions() { + return permissions; + } + @Override public Collection getAuthorities() { - return permissions; + return authorities; } @Override diff --git a/backend/src/main/java/com/stdproject/service/CustomUserDetailsService.java b/backend/src/main/java/com/stdproject/service/CustomUserDetailsService.java index d48b2fc..9f4f6d2 100644 --- a/backend/src/main/java/com/stdproject/service/CustomUserDetailsService.java +++ b/backend/src/main/java/com/stdproject/service/CustomUserDetailsService.java @@ -16,10 +16,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -51,8 +48,8 @@ public class CustomUserDetailsService implements UserDetailsService { if (appUser == null) { throw new UsernameNotFoundException("用户不存在: " + username); } - Collection authorities = buildUserAuthorities(appUser); - LoginUser loginUser = new LoginUser(appUser,authorities); + List permissions = buildUserAuthorities(appUser); + LoginUser loginUser = new LoginUser(appUser,permissions); return loginUser; } @@ -63,30 +60,14 @@ public class CustomUserDetailsService implements UserDetailsService { * @param appUser 用户信息 * @return 权限集合 */ - private Collection buildUserAuthorities(User appUser) { - Set authorities = new HashSet<>(); + private List buildUserAuthorities(User appUser) { + List permissions = new ArrayList<>(); try { - // 根据用户类型添加基本角色权限 - if ("0".equals(appUser.getUsertype())) { - authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN")); - } else { - authorities.add(new SimpleGrantedAuthority("ROLE_USER")); - } - // 使用RoleMapper直接查询用户的角色信息 List roles = roleMapper.getRoleByUserId(appUser.getId()); if (!roles.isEmpty()) { - // 处理角色权限 - for (Role role : roles) { - if ("1".equals(role.getIsvaild())) { - // 添加角色权限,格式:ROLE_角色编码 - if (StringUtils.hasText(role.getRolecode())) { - authorities.add(new SimpleGrantedAuthority("ROLE_" + role.getRolecode().toUpperCase())); - } - } - } // 获取角色ID列表 List roleIds = roles.stream() .map(Role::getId) @@ -103,44 +84,20 @@ public class CustomUserDetailsService implements UserDetailsService { for (Menu menu : menus) { if ("1".equals(menu.getIsdisplay()) && StringUtils.hasText(menu.getCode())) { // 添加菜单权限,格式:菜单编码 - authorities.add(new SimpleGrantedAuthority(menu.getCode())); - - // 根据菜单类型添加操作权限 - String menuCode = menu.getCode(); - if (StringUtils.hasText(menuCode)) { - // 为每个菜单添加基本操作权限 - authorities.add(new SimpleGrantedAuthority(menuCode + ":list")); - authorities.add(new SimpleGrantedAuthority(menuCode + ":detail")); - - // 管理员拥有所有操作权限 - if ("0".equals(appUser.getUsertype())) { - authorities.add(new SimpleGrantedAuthority(menuCode + ":add")); - authorities.add(new SimpleGrantedAuthority(menuCode + ":edit")); - authorities.add(new SimpleGrantedAuthority(menuCode + ":delete")); - authorities.add(new SimpleGrantedAuthority(menuCode + ":permission")); - } - } + permissions.add(menu); } } } } } - - log.debug("用户 {} 的权限列表: {}", appUser.getUsername(), - authorities.stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList())); + } catch (Exception e) { log.error("构建用户权限失败: {}", e.getMessage(), e); - // 发生异常时,至少保证基本角色权限 - authorities.clear(); - if ("0".equals(appUser.getUsertype())) { - authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN")); - } else { - authorities.add(new SimpleGrantedAuthority("ROLE_USER")); - } + permissions.clear(); } - return authorities; + return permissions; }