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;
+
+}