From a2803359a6e17e44565b89e6ed25103f2e546d5b Mon Sep 17 00:00:00 2001 From: wangzhiwei Date: Thu, 29 Jan 2026 17:35:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(login):=20=E4=BF=AE=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=99=BB=E5=87=BA=E6=97=B6Redis=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=B8=85=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 注入RedissonClient用于操作Redis数据 - 在登出时从Redis中删除对应的用户信息 - 添加异常处理确保登出操作的稳定性 - 优化手机号验证逻辑增加格式校验 --- .../skills/controller/LoginController.java | 28 +++++++++++++++++-- .../service/impl/SysUserServiceImpl.java | 6 ++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/kexue/skills/controller/LoginController.java b/src/main/java/com/kexue/skills/controller/LoginController.java index 925606a..9b81a53 100644 --- a/src/main/java/com/kexue/skills/controller/LoginController.java +++ b/src/main/java/com/kexue/skills/controller/LoginController.java @@ -11,6 +11,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import org.redisson.api.RedissonClient; /** * (SysUser)表控制层 @@ -28,6 +29,12 @@ public class LoginController { */ @Resource private SysUserService sysUserService; + + /** + * Redisson客户端 + */ + @Resource + private RedissonClient redissonClient; /** * 用户登录 @@ -50,9 +57,24 @@ public class LoginController { @PostMapping("/accountLogout") @Operation(summary = "用户登出", description = "用户登出") public CommonResult logout() { - // 使用Sa-Token登出 - cn.dev33.satoken.stp.StpUtil.logout(); - return CommonResult.success("登出成功"); + try { + // 获取当前用户的token + String token = cn.dev33.satoken.stp.StpUtil.getTokenValue(); + + // 使用Sa-Token登出 + cn.dev33.satoken.stp.StpUtil.logout(); + + // 从Redis中删除用户信息 + if (token != null && !token.isEmpty()) { + redissonClient.getBucket("loginUser:" + token).delete(); + } + + return CommonResult.success("登出成功"); + } catch (Exception e) { + // 如果获取token失败,仍然执行登出操作 + cn.dev33.satoken.stp.StpUtil.logout(); + return CommonResult.success("登出成功"); + } } /** diff --git a/src/main/java/com/kexue/skills/service/impl/SysUserServiceImpl.java b/src/main/java/com/kexue/skills/service/impl/SysUserServiceImpl.java index 3ee9e0b..cbfda48 100644 --- a/src/main/java/com/kexue/skills/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/kexue/skills/service/impl/SysUserServiceImpl.java @@ -652,6 +652,12 @@ public class SysUserServiceImpl implements SysUserService { // 参数校验 Assert.notBlank(phone, "手机号不能为空"); + // 验证手机号格式 + String phoneRegex = "^1[3-9\\d{9}$"; + if (!phone.matches(phoneRegex)) { + Assert.isTrue(false, "手机号格式不正确"); + } + // 生成6位随机验证码 String code = generateSmsCode();