From a284792b8d8555c8a60b2e226bf36f91311d7147 Mon Sep 17 00:00:00 2001
From: hongjli <3117313295@qq.com>
Date: 星期三, 16 四月 2025 10:28:00 +0800
Subject: [PATCH] 优化

---
 docs/UserController_API_Test.md                          |   55 ++++++++++++++++++++++++++-
 src/main/java/com/weiwojc/controller/UserController.java |   19 +++++++++
 2 files changed, 72 insertions(+), 2 deletions(-)

diff --git a/docs/UserController_API_Test.md b/docs/UserController_API_Test.md
index ec28246..da5b37d 100644
--- a/docs/UserController_API_Test.md
+++ b/docs/UserController_API_Test.md
@@ -194,7 +194,57 @@
      }
      ```
 
-## 3. 鑾峰彇鐢ㄦ埛淇℃伅鎺ュ彛
+## 3. 閫�鍑虹櫥褰曟帴鍙�
+
+### 鎺ュ彛淇℃伅
+- 璇锋眰璺緞锛歚/api/users/logout`
+- 璇锋眰鏂规硶锛歅OST
+- 璇锋眰澶达細闇�瑕佹惡甯� token
+
+### 娴嬭瘯鐢ㄤ緥
+
+#### 鎴愬姛鍦烘櫙
+1. 姝e父閫�鍑虹櫥褰�
+   - 璇锋眰澶达細
+     ```
+     token: eyJhbGciOiJIUzI1NiJ9...
+     ```
+   - 棰勬湡鍝嶅簲锛�
+     ```json
+     {
+         "code": 200,
+         "message": "閫�鍑虹櫥褰曟垚鍔�",
+         "data": null
+     }
+     ```
+
+#### 澶辫触鍦烘櫙
+1. 鏈惡甯� token
+   - 璇锋眰澶达細鏃� token
+   - 棰勬湡鍝嶅簲锛�
+     ```json
+     {
+         "code": 400,
+         "message": "鏈櫥褰曠姸鎬�",
+         "data": null
+     }
+     ```
+
+2. token 鏃犳晥鎴栧凡杩囨湡
+   - 璇锋眰澶达細
+     ```
+     token: invalid_token
+     ```
+   - 棰勬湡鍝嶅簲锛�
+     ```json
+     {
+         "code": 401,
+         "message": "token鏃犳晥鎴栧凡杩囨湡",
+         "data": null
+     }
+     ```
+
+## 4. 鑾峰彇鐢ㄦ埛淇℃伅鎺ュ彛
 
 ### 鎺ュ彛淇℃伅
 - 璇锋眰璺緞锛歚/api/users/info`
@@ -282,4 +332,5 @@
 3. 鐢ㄦ埛淇℃伅鎺ュ彛闇�瑕佹湁鏁堢殑 JWT token
 4. 瀵嗙爜鍦ㄤ紶杈撹繃绋嬩腑搴旇浣跨敤 HTTPS 鍔犲瘑
 5. 寤鸿鍦ㄦ祴璇曠幆澧冧腑浣跨敤娴嬭瘯鏁版嵁搴�
-6. 娴嬭瘯鏃舵敞鎰忔竻鐞嗘祴璇曟暟鎹紝閬垮厤褰卞搷鍏朵粬娴嬭瘯鐢ㄤ緥 
\ No newline at end of file
+6. 娴嬭瘯鏃舵敞鎰忔竻鐞嗘祴璇曟暟鎹紝閬垮厤褰卞搷鍏朵粬娴嬭瘯鐢ㄤ緥
+7. 閫�鍑虹櫥褰曞悗鐨� token 浼氳鍔犲叆榛戝悕鍗曪紝鏃犳硶鍐嶆浣跨敤 
\ No newline at end of file
diff --git a/src/main/java/com/weiwojc/controller/UserController.java b/src/main/java/com/weiwojc/controller/UserController.java
index 7a63193..9e12e14 100644
--- a/src/main/java/com/weiwojc/controller/UserController.java
+++ b/src/main/java/com/weiwojc/controller/UserController.java
@@ -6,6 +6,7 @@
 import com.weiwojc.model.entity.User;
 import com.weiwojc.service.UserService;
 import com.weiwojc.utils.JwtUtils;
+import com.weiwojc.utils.TokenBlacklistManager;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
@@ -18,6 +19,7 @@
 
     private final UserService userService;
     private final JwtUtils jwtUtils;
+    private final TokenBlacklistManager tokenBlacklistManager;
 
     @PostMapping("/register")
     public Result<User> register(@Valid @RequestBody UserRegisterDTO registerDTO) {
@@ -31,6 +33,23 @@
         return Result.success("鐧诲綍鎴愬姛", token);
     }
 
+    @PostMapping("/logout")
+    public Result<String> logout(HttpServletRequest request) {
+        String token = request.getHeader("token");
+        if (token == null || token.isEmpty()) {
+            return Result.error("鏈櫥褰曠姸鎬�");
+        }
+
+        // 楠岃瘉token鏄惁鏈夋晥
+        if (!jwtUtils.validateToken(token)) {
+            return Result.unauthorized("token鏃犳晥鎴栧凡杩囨湡");
+        }
+
+        // 灏唗oken鍔犲叆榛戝悕鍗�
+        tokenBlacklistManager.addToBlacklist(token);
+        return Result.success("閫�鍑虹櫥褰曟垚鍔�");
+    }
+
     @GetMapping("/info")
     public Result<User> getUserInfo(HttpServletRequest request) {
         String token = request.getHeader("token");

--
Gitblit v1.9.3