From 0485def527c6637fdd659ccc9c2d6e0f4e7dd5cb Mon Sep 17 00:00:00 2001 From: ziin Date: Wed, 17 Dec 2025 21:54:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(auth):=20=E6=96=B0=E5=A2=9E=E5=A4=A7?= =?UTF-8?q?=E5=93=A5=E7=A7=9F=E6=88=B7=E4=B8=93=E5=B1=9E=E7=99=BB=E5=87=BA?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserController.java | 5 +++++ .../service/impl/LoginService.java | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/main/java/com/yupi/springbootinit/controller/UserController.java b/src/main/java/com/yupi/springbootinit/controller/UserController.java index f3148d4..b0a4b90 100644 --- a/src/main/java/com/yupi/springbootinit/controller/UserController.java +++ b/src/main/java/com/yupi/springbootinit/controller/UserController.java @@ -68,4 +68,9 @@ public class UserController { return ResultUtils.success(loginService.logout()); } + @PostMapping("/bigbrother-logout") + public BaseResponse bigBrotherLogout(@RequestBody SystemUsersDTO usersDTO){ + return ResultUtils.success(loginService.bigBrotherLogout(usersDTO)); + } + } diff --git a/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java b/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java index 032bcfe..02fffe9 100644 --- a/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java +++ b/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java @@ -246,6 +246,27 @@ public class LoginService { return true; } + public Boolean bigBrotherLogout(SystemUsersDTO usersDTO) { + // 1. 删除 Redis 中该用户的 BIG_BROTHER 登录标记 + Boolean bigBrother_login = redisTemplate.delete("bigbrother_login:" + usersDTO.getTenantId() + ":" + usersDTO.getUserId()); + + // 2. 使当前 Token 失效 + String tokenValue = StpUtil.getTokenValue(); + StpUtil.logoutByTokenValue(tokenValue); + + log.info("删除租户:{} 登录状态:{}", usersDTO.getTenantId(), bigBrother_login); + + // 3. 若该租户下已无 AI_CHAT 在线用户,则删除队列 + if (!redisUtils.hasKeyByPrefix("bigbrother_login:" + usersDTO.getTenantId())) { + boolean b = rabbitAdmin.deleteQueue("b.tenant." + usersDTO.getTenantId()); + log.info("删除大哥租户:{} 队列删除状态:{}", usersDTO.getTenantId(), b); + } + + + return true; + } + + /** * 通用登出(不区分场景) *