From 47976b80de1bd41f99d050fc76a040e6f2b732ee Mon Sep 17 00:00:00 2001 From: "kuang.yife" Date: Mon, 15 May 2023 14:57:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/tool/NoticeController.java | 74 +++++++++++++++++++ ruoyi-common/pom.xml | 6 ++ .../ruoyi/framework/config/ShiroConfig.java | 2 + .../ruoyi/system/domain/NoticeRequest.java | 20 +++++ 4 files changed, 102 insertions(+) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/NoticeController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/NoticeRequest.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/NoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/NoticeController.java new file mode 100644 index 00000000..97316f26 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/NoticeController.java @@ -0,0 +1,74 @@ +package com.ruoyi.web.controller.tool; + +import com.aliyun.dysmsapi20170525.Client; +import com.aliyun.dysmsapi20170525.models.SendSmsRequest; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.aliyun.teaopenapi.models.Config; +import com.aliyun.teautil.models.RuntimeOptions; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.CacheUtils; +import com.ruoyi.common.utils.ExceptionUtil; +import com.ruoyi.system.domain.NoticeRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.validation.Valid; + +/** + * @author clunt + * 通知模块 + */ +@Slf4j +@Controller +@RequestMapping("/tool/notice") +public class NoticeController { + + + @PostMapping("/sendSms") + @ResponseBody + public AjaxResult sendMsg(@RequestBody @Valid NoticeRequest request){ + try { + // 短信验证码 + String code = String.valueOf((int)((Math.random() * 9 + 1) * Math.pow(10,5))); + + // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html + Client client = createClient("LTAI5tLDuQRdfyHASSxehs9m", "accessKeySecret"); + SendSmsRequest sendSmsRequest = new SendSmsRequest() + .setSignName("保无忧") + .setTemplateCode("SMS_275375715") + .setPhoneNumbers(request.getPhone()) + .setTemplateParam("{\"code\":"+ code +"}"); + RuntimeOptions runtime = new RuntimeOptions(); + // 复制代码运行请自行打印 API 的返回值 + SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); + log.info("发送给{}短信响应为{}", request.getPhone(), sendSmsResponse); + CacheUtils.put(request.getPhone(), code); + }catch (Exception e){ + log.error("给 {} 发送短信失败 {}", request.getPhone(), ExceptionUtil.getExceptionMessage(e)); + } + return AjaxResult.success("操作成功!"); + } + + /** + * 使用AK&SK初始化账号Client + * @param accessKeyId + * @param accessKeySecret + * @return Client + * @throws Exception + */ + public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception { + Config config = new Config() + // 必填,您的 AccessKey ID + .setAccessKeyId(accessKeyId) + // 必填,您的 AccessKey Secret + .setAccessKeySecret(accessKeySecret); + // 访问的域名 + config.endpoint = "dysmsapi.aliyuncs.com"; + return new Client(config); + } + +} diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index fe8cb7a5..2ab0d988 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -100,6 +100,12 @@ lombok + + com.aliyun + dysmsapi20170525 + 2.0.23 + + \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java index e14a3b47..e179452f 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java @@ -288,6 +288,8 @@ public class ShiroConfig filterChainDefinitionMap.put("/js/**", "anon"); filterChainDefinitionMap.put("/ruoyi/**", "anon"); filterChainDefinitionMap.put("/captcha/captchaImage**", "anon"); + // 短信验证码接口 + filterChainDefinitionMap.put("/tool/notice/**", "anon"); // 退出 logout地址,shiro去清除session filterChainDefinitionMap.put("/logout", "logout"); // 不需要拦截的访问 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/NoticeRequest.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/NoticeRequest.java new file mode 100644 index 00000000..6d5838fa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/NoticeRequest.java @@ -0,0 +1,20 @@ +package com.ruoyi.system.domain; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author clunt + * 通知实体 + */ +@Data +public class NoticeRequest { + + /** + * 手机号 + * */ + @NotNull + private String phone; + +}