From f6230d6cf7fa7f07b5b5725c2cdd6d2db0935237 Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Mon, 6 Jul 2026 17:51:49 +0800 Subject: [PATCH] sms --- .../adapter/web/AccountController.java | 2 +- .../infrastructure/remote/SmsRemote.java | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/AccountController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/AccountController.java index 8c5b561..59ccc5a 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/AccountController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/AccountController.java @@ -74,7 +74,7 @@ public class AccountController { @ApiOperation("发送短信") @PostMapping("/sendMessage") - public com.alibaba.cola.dto.SingleResponse sendMessage(@Validated @RequestBody SendMessageCmd cmd) { + public com.alibaba.cola.dto.SingleResponse sendMessage(@Validated @RequestBody SendMessageCmd cmd) { return smsRemote.sign(cmd.getMobile()); } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/remote/SmsRemote.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/remote/SmsRemote.java index d9966b2..3392165 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/remote/SmsRemote.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/remote/SmsRemote.java @@ -64,6 +64,11 @@ public class SmsRemote { private final RedisService redisService; private final RedissonClient redissonClient; + /** + * 注册验证码前缀 + */ + public static final String SMS_SIGN_PREFIX = "sms:sign"; + @Value("${sms.sign.sourceCode:}") private String sourceCode; @@ -91,16 +96,17 @@ public class SmsRemote { return sendSms(mobile, content); } - public SingleResponse sign(String mobile) { + public SingleResponse sign(String mobile) { String validCode = generateVerificationCode(); - String bizId = cn.hutool.core.lang.UUID.fastUUID().toString(); + String bizId = SMS_SIGN_PREFIX + mobile; String content = "【秦安安全】您正在注册本系统,验证码:" + validCode + ",5分钟内有效,请勿泄露给他人,如非本人操作请忽略本条短信。"; sendSms(mobile, content); redisService.set(bizId, validCode, 5 * 60 * 1000); - return SingleResponse.of(bizId); + return SingleResponse.of(true); } - public SingleResponse signValidCode(String bizId, String validCode) { + public boolean signValidCode(String mobile, String validCode) { + String bizId = SMS_SIGN_PREFIX + mobile; // 以 bizId 为 key 加分布式锁,锁 1s,防止刷验证码 RLock lock = redissonClient.getLock(bizId); boolean locked; @@ -119,11 +125,10 @@ public class SmsRemote { if (code == null) { throw new BizException(SMS_CODE_EXPIRED); } - if (code.toString().equals(validCode)) { throw new BizException(SMS_CODE_NOT_RIGHT); } - return SingleResponse.of(bizId); + return true; } finally { if (lock.isHeldByCurrentThread()) { lock.unlock();