From 8b72b988569615ccae560f01ce1c80ce23f7c674 Mon Sep 17 00:00:00 2001 From: FalingCliff Date: Sun, 25 May 2025 16:59:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(auth):=20=E4=BC=98=E5=8C=96=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E7=99=BB=E5=BD=95=E5=92=8C=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 LoginDto 和 WxLoginDTO 中添加了验证注解,提高了数据输入的准确性 - 新增 getUserInfo 方法,用于获取管理员信息 - 修改了 login 方法,使用 @Validated 注解进行参数校验 - 调整了 SecurityConfig,允许所有请求通过 Spring Security 的权限拦截 - 修改了 AuthConst 中的 ADMIN_AUTHORIZATION_HEADER 值 --- .../admin_server/config/SecurityConfig.java | 16 ++------- .../admin_server/constant/AuthConst.java | 2 +- .../controller/admin/AdminAuthController.java | 34 +++++++++++++++---- .../admin_server/model/dto/LoginDto.java | 4 +-- .../admin_server/model/dto/WxLoginDTO.java | 2 +- 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/example/admin_server/config/SecurityConfig.java b/src/main/java/com/example/admin_server/config/SecurityConfig.java index 70dd15e..3e8bf2f 100644 --- a/src/main/java/com/example/admin_server/config/SecurityConfig.java +++ b/src/main/java/com/example/admin_server/config/SecurityConfig.java @@ -35,24 +35,12 @@ public class SecurityConfig { http .cors().and() .csrf().disable() - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() - .antMatchers( - "/swagger-ui.html", - "/swagger-ui/**", - "/v3/api-docs/**", - "/api/public/**", - "/api/admin/auth/login", - "/api/client/wx/login" - ).permitAll() - .antMatchers("/api/admin/**").authenticated() - .antMatchers("/api/client/**").authenticated() - .anyRequest().permitAll() + .anyRequest().permitAll() // 所有接口 Spring Security 不再做权限拦截 .and() .addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); - return http.build(); } diff --git a/src/main/java/com/example/admin_server/constant/AuthConst.java b/src/main/java/com/example/admin_server/constant/AuthConst.java index 3ec6b2c..0abc0c4 100644 --- a/src/main/java/com/example/admin_server/constant/AuthConst.java +++ b/src/main/java/com/example/admin_server/constant/AuthConst.java @@ -5,7 +5,7 @@ package com.example.admin_server.constant; */ public class AuthConst { // 管理端 - public static final String ADMIN_AUTHORIZATION_HEADER = "adminAuthToken"; + public static final String ADMIN_AUTHORIZATION_HEADER = "authorization"; // 客户端 public static final String FRONT_AUTHORIZATION_HEADER = "assessToken"; } diff --git a/src/main/java/com/example/admin_server/controller/admin/AdminAuthController.java b/src/main/java/com/example/admin_server/controller/admin/AdminAuthController.java index 1655c88..da08826 100644 --- a/src/main/java/com/example/admin_server/controller/admin/AdminAuthController.java +++ b/src/main/java/com/example/admin_server/controller/admin/AdminAuthController.java @@ -13,10 +13,8 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.util.DigestUtils; import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; @@ -33,7 +31,7 @@ public class AdminAuthController { @PostMapping("/login") @ApiOperation("管理员登录") - public Result login(@RequestBody LoginDto request) { + public Result login(@Validated @RequestBody LoginDto request) { Admin admin = adminMapper.selectOne( new QueryWrapper().eq("username", request.getUsername()) ); @@ -84,6 +82,30 @@ public class AdminAuthController { return getResult(data); } + @GetMapping("/getUserInfo") + @ApiOperation("获取管理员信息") + public Result getUserInfo(@RequestHeader("authorization") String token) { + if (!StringUtils.hasText(token)) { + return Result.of(ResultCode.UNAUTHORIZED, "缺少 token"); + } + + Optional claimsOpt = jwtUtil.parseToken(token); + if (!claimsOpt.isPresent() || jwtUtil.isTokenExpired(token)) { + return Result.of(ResultCode.UNAUTHORIZED, "token 无效或已过期"); + } + + Claims claims = claimsOpt.get(); + + Map userInfo = new HashMap<>(); + userInfo.put("userId", String.valueOf(claims.get("id"))); + userInfo.put("userName", claims.get("username")); + userInfo.put("roles", new String[]{"R_SUPER"}); + userInfo.put("buttons", new String[]{"B_CODE1", "B_CODE2", "B_CODE3"}); + + return Result.ok(userInfo); + } + + private Result getResult(Map data) { String newToken = jwtUtil.generateToken(data); String newRefreshToken = jwtUtil.generateRefreshToken(data); @@ -92,6 +114,6 @@ public class AdminAuthController { tokenMap.put("token", newToken); tokenMap.put("refreshToken", newRefreshToken); - return Result.ok("请求成功", tokenMap); + return Result.ok(tokenMap); } } diff --git a/src/main/java/com/example/admin_server/model/dto/LoginDto.java b/src/main/java/com/example/admin_server/model/dto/LoginDto.java index 46d413d..77500da 100644 --- a/src/main/java/com/example/admin_server/model/dto/LoginDto.java +++ b/src/main/java/com/example/admin_server/model/dto/LoginDto.java @@ -6,9 +6,9 @@ import javax.validation.constraints.NotBlank; @Data public class LoginDto { - @NotBlank + @NotBlank(message = "用户名不能为空") private String username; - @NotBlank + @NotBlank(message = "密码不能为空") private String password; } diff --git a/src/main/java/com/example/admin_server/model/dto/WxLoginDTO.java b/src/main/java/com/example/admin_server/model/dto/WxLoginDTO.java index 83a8d7f..7ad53b9 100644 --- a/src/main/java/com/example/admin_server/model/dto/WxLoginDTO.java +++ b/src/main/java/com/example/admin_server/model/dto/WxLoginDTO.java @@ -7,6 +7,6 @@ import javax.validation.constraints.NotBlank; @Data public class WxLoginDTO { - @NotBlank + @NotBlank(message = "CODE不能为空") private String code; }