From b369b28949ef0ceec6df2dad568ba5e2a672b0b4 Mon Sep 17 00:00:00 2001 From: chenyouting <514333061@qq.com> Date: Sat, 19 Jul 2025 14:23:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=BF=98=E8=AE=B0=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E6=89=8B=E6=9C=BA=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/controller/AppUserController.java | 34 ++++++++++++++++--- .../web/controller/CaptchaController.java | 2 +- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppUserController.java b/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppUserController.java index c23a789..fd6c4e4 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppUserController.java +++ b/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppUserController.java @@ -1,17 +1,29 @@ package com.fuyuanshen.app.controller; import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.util.RandomUtil; import com.fuyuanshen.app.domain.dto.APPForgotPasswordDTO; import com.fuyuanshen.app.domain.dto.APPForgotPasswordSmsDTO; import com.fuyuanshen.app.domain.dto.APPUpdateUserDTO; import com.fuyuanshen.app.domain.vo.APPUserInfoVo; import com.fuyuanshen.app.service.IAppUserService; +import com.fuyuanshen.common.core.constant.Constants; +import com.fuyuanshen.common.core.constant.GlobalConstants; import com.fuyuanshen.common.core.domain.R; +import com.fuyuanshen.common.ratelimiter.annotation.RateLimiter; +import com.fuyuanshen.common.redis.utils.RedisUtils; import com.fuyuanshen.common.web.core.BaseController; +import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; +import org.dromara.sms4j.api.SmsBlend; +import org.dromara.sms4j.api.entity.SmsResponse; +import org.dromara.sms4j.core.factory.SmsFactory; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.time.Duration; +import java.util.LinkedHashMap; + /** * APP 用户管理 * @date 2025-06-27 @@ -50,13 +62,27 @@ public class AppUserController extends BaseController { } - /** * 发送忘记密码短信 + * + * @param phonenumber 用户手机号 */ @SaIgnore - @PostMapping("/sendForgotPasswordSms") - public R sendForgotPasswordSms(@Validated @RequestBody APPForgotPasswordSmsDTO dto) throws Exception { - return toAjax(appUserService.sendForgotPasswordSms(dto)); + @RateLimiter(key = "#phonenumber", time = 60, count = 1) + @GetMapping("/sendForgotPasswordSms") + public R smsCode(@NotBlank(message = "{user.phonenumber.not.blank}") String phonenumber) { + String key = GlobalConstants.APP_FORGOT_PASSWORD_SMS_KEY + phonenumber; + String code = RandomUtil.randomNumbers(4); + RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION)); + // 验证码模板id 自行处理 (查数据库或写死均可) + String templateId = ""; + LinkedHashMap map = new LinkedHashMap<>(1); + map.put("code", code); + SmsBlend smsBlend = SmsFactory.getSmsBlend("config1"); + SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, map); + if (!smsResponse.isSuccess()) { + return R.fail(smsResponse.getData().toString()); + } + return R.ok(); } } diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/controller/CaptchaController.java b/fys-admin/src/main/java/com/fuyuanshen/web/controller/CaptchaController.java index bb066b9..d243139 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/web/controller/CaptchaController.java +++ b/fys-admin/src/main/java/com/fuyuanshen/web/controller/CaptchaController.java @@ -67,7 +67,7 @@ public class CaptchaController { LinkedHashMap map = new LinkedHashMap<>(1); map.put("code", code); SmsBlend smsBlend = SmsFactory.getSmsBlend("config1"); - SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, templateId, map); + SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, map); if (!smsResponse.isSuccess()) { log.error("验证码短信发送异常 => {}", smsResponse); return R.fail(smsResponse.getData().toString());