From 849cea950529e17a0d3e45546a5eec7a8215a034 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Mon, 10 Feb 2025 16:22:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=9D=83=E9=99=90=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E5=BC=80=E5=85=B3=20=E8=B0=83=E6=95=B4=E4=BA=BA?= =?UTF-8?q?=E5=91=98=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qyft/gd/system/controller/AuthController.java | 5 +++- .../qyft/gd/system/controller/UserController.java | 35 ++++++++++++++++++++-- .../gd/system/filter/JwtAuthenticationFilter.java | 18 +++++------ .../java/com/qyft/gd/system/model/entity/Role.java | 14 +++------ 4 files changed, 49 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/qyft/gd/system/controller/AuthController.java b/src/main/java/com/qyft/gd/system/controller/AuthController.java index f47074b..4a9b235 100644 --- a/src/main/java/com/qyft/gd/system/controller/AuthController.java +++ b/src/main/java/com/qyft/gd/system/controller/AuthController.java @@ -1,5 +1,6 @@ package com.qyft.gd.system.controller; +import com.qyft.gd.system.common.enums.DeletedEnum; import com.qyft.gd.system.common.result.Result; import com.qyft.gd.system.common.result.ResultCode; import com.qyft.gd.system.common.utils.JwtUtil; @@ -15,6 +16,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.Objects; + /** * 认证控制 */ @@ -35,7 +38,7 @@ public class AuthController { ) { // 查找用户 User user = userService.findByUsername(username); - if (user != null && user.getPassword().equals(password)) { + if (user != null && !Objects.equals(user.getIsDeleted(), DeletedEnum.ENABLE.getValue()) && user.getPassword().equals(password)) { String token = JwtUtil.createJWE(user.getUsername()); return Result.success("Bearer " + token); } diff --git a/src/main/java/com/qyft/gd/system/controller/UserController.java b/src/main/java/com/qyft/gd/system/controller/UserController.java index 4c3e137..06a456c 100644 --- a/src/main/java/com/qyft/gd/system/controller/UserController.java +++ b/src/main/java/com/qyft/gd/system/controller/UserController.java @@ -5,10 +5,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.qyft.gd.system.common.base.BasePageQuery; import com.qyft.gd.system.common.result.PageResult; import com.qyft.gd.system.common.result.Result; +import com.qyft.gd.system.common.result.ResultCode; +import com.qyft.gd.system.common.utils.JwtUtil; import com.qyft.gd.system.model.entity.User; import com.qyft.gd.system.service.UserService; +import io.jsonwebtoken.Claims; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -31,13 +35,38 @@ public class UserController { @Operation(summary = "添加新用户") @PostMapping("/") public Result addUser(@RequestBody User user) { - boolean isSuccess = userService.addUser(user); - if (isSuccess) { - return Result.success(); + User existingUser = userService.findByUsername(user.getUsername()); + if(existingUser == null) { + boolean isSuccess = userService.addUser(user); + if (isSuccess) { + return Result.success(); + } + }else{ + return Result.failed(ResultCode.USERNAME_ALREADY_EXISTS); } return Result.failed(); } + @Operation(summary = "当前用户信息") + @GetMapping("/current") + public Result currentUser(HttpServletRequest request) { + String token = (String) request.getAttribute("token"); + if (token == null || token.isEmpty()) { + return Result.failed(); + } + try { + Claims claims = JwtUtil.parseJWE(token); + String username = claims.getSubject(); + User user = userService.findByUsername(username); + if (user == null) { + return Result.failed(); + } + return Result.success(user); + } catch (Exception e) { + return Result.failed(); + } + } + @Operation(summary = "更新用户信息") @PutMapping("/{id}") public Result updateUser(@PathVariable Long id, @RequestBody User user) { diff --git a/src/main/java/com/qyft/gd/system/filter/JwtAuthenticationFilter.java b/src/main/java/com/qyft/gd/system/filter/JwtAuthenticationFilter.java index 4e3cea4..41398ff 100644 --- a/src/main/java/com/qyft/gd/system/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/qyft/gd/system/filter/JwtAuthenticationFilter.java @@ -21,15 +21,15 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - if(jwtEnabled){ - String token = getTokenFromRequest(request); - if (shouldBypass(request)) { - filterChain.doFilter(request, response); - return; - } - if (token != null && JwtUtil.parseJWE(token) != null) { - request.setAttribute("token", token); // 可以将 token 存储在 request 属性中,供后续使用 - } else { + String token = getTokenFromRequest(request); + if (shouldBypass(request)) { + filterChain.doFilter(request, response); + return; + } + if (token != null && JwtUtil.parseJWE(token) != null) { + request.setAttribute("token", token); // 可以将 token 存储在 request 属性中,供后续使用 + } else { + if (jwtEnabled) { ResponseUtils.writeErrMsg(response, ResultCode.ACCESS_TOKEN_INVALID); return; } diff --git a/src/main/java/com/qyft/gd/system/model/entity/Role.java b/src/main/java/com/qyft/gd/system/model/entity/Role.java index 45ad087..f906188 100644 --- a/src/main/java/com/qyft/gd/system/model/entity/Role.java +++ b/src/main/java/com/qyft/gd/system/model/entity/Role.java @@ -2,29 +2,23 @@ package com.qyft.gd.system.model.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.qyft.gd.system.common.base.BaseEntity; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.Setter; /** * 角色实体 */ +@Schema(description = "角色信息") @TableName("sys_role") @Getter @Setter public class Role extends BaseEntity { - /** - * 角色名称 - */ + @Schema(description = "角色名称") private String name; - /** - * 角色编码 - */ + @Schema(description = "角色编码") private String code; - /** - * 是否删除(0-否 1-是) - */ - private Integer isDeleted; } \ No newline at end of file