From 5b3901770843cab6ba0e434fdbe3e3302c9ff88e Mon Sep 17 00:00:00 2001 From: 心如止水 <8902735+gaobinbin991314@user.noreply.gitee.com> Date: 星期四, 30 三月 2023 18:50:58 +0800 Subject: [PATCH] !324 系统配置读取方式变更 1、前端登录页面注册开关 对接后端数据库 2、密码最大错误次数与锁定时间转移到数据库 3、短信开关与验证码模板id 转移到数据库参数管理内 --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/CaptchaController.java | 61 ++++++++++++++++++++++-------- 1 files changed, 45 insertions(+), 16 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/CaptchaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/CaptchaController.java index d38d154..f3940c6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/CaptchaController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/CaptchaController.java @@ -3,21 +3,25 @@ import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.captcha.AbstractCaptcha; import cn.hutool.captcha.generator.CodeGenerator; +import cn.hutool.core.convert.Convert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.RandomUtil; -import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.constant.GlobalConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.SpringUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.reflect.ReflectUtils; +import com.ruoyi.common.mail.config.properties.MailProperties; +import com.ruoyi.common.mail.utils.MailUtils; import com.ruoyi.common.redis.utils.RedisUtils; -import com.ruoyi.common.sms.config.properties.SmsProperties; import com.ruoyi.common.sms.core.SmsTemplate; import com.ruoyi.common.sms.entity.SmsResult; import com.ruoyi.common.web.config.properties.CaptchaProperties; import com.ruoyi.common.web.enums.CaptchaType; import com.ruoyi.system.service.ISysConfigService; +import com.ruoyi.web.domain.vo.CaptchaVo; +import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.expression.Expression; @@ -27,7 +31,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; -import jakarta.validation.constraints.NotBlank; import java.time.Duration; import java.util.HashMap; import java.util.Map; @@ -45,25 +48,25 @@ public class CaptchaController { private final CaptchaProperties captchaProperties; - private final SmsProperties smsProperties; + private final MailProperties mailProperties; private final ISysConfigService configService; + /** * 鐭俊楠岃瘉鐮� * * @param phonenumber 鐢ㄦ埛鎵嬫満鍙� */ - @GetMapping("/captchaSms") - public R<Void> smsCaptcha(@NotBlank(message = "{user.phonenumber.not.blank}") - String phonenumber) { - if (!smsProperties.getEnabled()) { + @GetMapping("/sms/code") + public R<Void> smsCode(@NotBlank(message = "{user.phonenumber.not.blank}") String phonenumber) { + if (!Convert.toBool(configService.selectConfigByKey("sys.account.smsEnabled"))) { return R.fail("褰撳墠绯荤粺娌℃湁寮�鍚煭淇″姛鑳斤紒"); } - String key = CacheConstants.CAPTCHA_CODE_KEY + phonenumber; + String key = GlobalConstants.CAPTCHA_CODE_KEY + phonenumber; String code = RandomUtil.randomNumbers(4); RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION)); // 楠岃瘉鐮佹ā鏉縤d 鑷澶勭悊 (鏌ユ暟鎹簱鎴栧啓姝诲潎鍙�) - String templateId = ""; + String templateId = configService.selectConfigByKey("sys.account.templateId"); Map<String, String> map = new HashMap<>(1); map.put("code", code); SmsTemplate smsTemplate = SpringUtils.getBean(SmsTemplate.class); @@ -76,17 +79,41 @@ } /** + * 閭楠岃瘉鐮� + * + * @param email 閭 + */ + @GetMapping("/email/code") + public R<Void> emailCode(@NotBlank(message = "{user.email.not.blank}") String email) { + if (!mailProperties.getEnabled()) { + return R.fail("褰撳墠绯荤粺娌℃湁寮�鍚偖绠卞姛鑳斤紒"); + } + String key = GlobalConstants.CAPTCHA_CODE_KEY + email; + String code = RandomUtil.randomNumbers(4); + RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION)); + try { + MailUtils.sendText(email, "鐧诲綍楠岃瘉鐮�", "鎮ㄦ湰娆¢獙璇佺爜涓猴細" + code + "锛屾湁鏁堟�т负" + Constants.CAPTCHA_EXPIRATION + "鍒嗛挓锛岃灏藉揩濉啓銆�"); + } catch (Exception e) { + log.error("楠岃瘉鐮佺煭淇″彂閫佸紓甯� => {}", e.getMessage()); + return R.fail(e.getMessage()); + } + return R.ok(); + } + + /** * 鐢熸垚楠岃瘉鐮� */ - @GetMapping("/captchaImage") - public R<Map<String, Object>> getCode() { - boolean captchaEnabled = configService.selectCaptchaEnabled(); + @GetMapping("/code") + public R<CaptchaVo> getCode() { + CaptchaVo captchaVo = new CaptchaVo(); + boolean captchaEnabled = captchaProperties.getEnable(); if (!captchaEnabled) { - return R.ok(Map.of("captchaEnabled", false)); + captchaVo.setCaptchaEnabled(false); + return R.ok(captchaVo); } // 淇濆瓨楠岃瘉鐮佷俊鎭� String uuid = IdUtil.simpleUUID(); - String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid; + String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + uuid; // 鐢熸垚楠岃瘉鐮� CaptchaType captchaType = captchaProperties.getType(); boolean isMath = CaptchaType.MATH == captchaType; @@ -102,7 +129,9 @@ code = exp.getValue(String.class); } RedisUtils.setCacheObject(verifyKey, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION)); - return R.ok(Map.of("uuid", uuid, "img", captcha.getImageBase64())); + captchaVo.setUuid(uuid); + captchaVo.setImg(captcha.getImageBase64()); + return R.ok(captchaVo); } } -- Gitblit v1.9.3