diff --git a/cloud-auth/pom.xml b/cloud-auth/pom.xml
index 0a76aae..8eeed38 100644
--- a/cloud-auth/pom.xml
+++ b/cloud-auth/pom.xml
@@ -57,7 +57,12 @@
com.muyu
cloud-common-api-doc
-
+
+
+ com.aliyun
+ dysmsapi20170525
+ 2.0.1
+
diff --git a/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java b/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java
index d870762..830b91e 100644
--- a/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java
+++ b/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java
@@ -11,10 +11,7 @@ import com.muyu.common.security.service.TokenService;
import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import jakarta.servlet.http.HttpServletRequest;
@@ -66,7 +63,13 @@ public class TokenController {
@PostMapping("register")
public Result> register (@RequestBody RegisterBody registerBody) {
// 用户注册
- sysLoginService.register(registerBody.getUsername(), registerBody.getPassword());
+ sysLoginService.register(registerBody.getUsername(), registerBody.getPassword(),registerBody.getPhonenumber());
return Result.success();
}
+
+
+ @PostMapping("/getPhoneCode/{phonenumber}")
+ public Result getPhoneCode(@PathVariable("phonenumber") String phonenumber) {
+ return sysLoginService.getPhoneCode(phonenumber);
+ }
}
diff --git a/cloud-auth/src/main/java/com/muyu/auth/form/RegisterBody.java b/cloud-auth/src/main/java/com/muyu/auth/form/RegisterBody.java
index c2a4d5a..6e182f7 100644
--- a/cloud-auth/src/main/java/com/muyu/auth/form/RegisterBody.java
+++ b/cloud-auth/src/main/java/com/muyu/auth/form/RegisterBody.java
@@ -5,6 +5,54 @@ package com.muyu.auth.form;
*
* @author muyu
*/
-public class RegisterBody extends LoginBody {
+public class RegisterBody {
+ /**
+ * 用户名
+ */
+ private String username;
+
+ /**
+ * 用户密码
+ */
+ private String password;
+
+ /**
+ *用户手机号
+ */
+ private String phonenumber;
+
+ private String phoneCode;
+
+ public String getUsername () {
+ return username;
+ }
+
+ public void setUsername (String username) {
+ this.username = username;
+ }
+
+ public String getPassword () {
+ return password;
+ }
+
+ public void setPassword (String password) {
+ this.password = password;
+ }
+
+ public String getPhonenumber() {
+ return phonenumber;
+ }
+
+ public void setPhonenumber(String phonenumber) {
+ this.phonenumber = phonenumber;
+ }
+
+ public String getPhoneCode() {
+ return phoneCode;
+ }
+
+ public void setPhoneCode(String phoneCode) {
+ this.phoneCode = phoneCode;
+ }
}
diff --git a/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java b/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java
index ff0af1a..0ca70b8 100644
--- a/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java
+++ b/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java
@@ -1,5 +1,8 @@
package com.muyu.auth.service;
+import cn.hutool.core.util.RandomUtil;
+import com.muyu.auth.form.RegisterBody;
+import com.muyu.auth.util.TelSmsUtils;
import com.muyu.common.core.constant.CacheConstants;
import com.muyu.common.core.constant.Constants;
import com.muyu.common.core.constant.SecurityConstants;
@@ -16,8 +19,15 @@ import com.muyu.common.system.remote.RemoteUserService;
import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.domain.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+
/**
* 登录校验方法
*
@@ -37,6 +47,11 @@ public class SysLoginService {
@Autowired
private RedisService redisService;
+
+ @Autowired
+ private RedisTemplateredisTemplate;
+
+
/**
* 登录
*/
@@ -98,10 +113,10 @@ public class SysLoginService {
/**
* 注册
*/
- public void register (String username, String password) {
+ public void register (String username, String password,String phonenumber) {
// 用户名或密码为空 错误
- if (StringUtils.isAnyBlank(username, password)) {
- throw new ServiceException("用户/密码必须填写");
+ if (StringUtils.isAnyBlank(username,password,phonenumber)) {
+ throw new ServiceException("用户/密码/手机号必须填写");
}
if (username.length() < UserConstants.USERNAME_MIN_LENGTH
|| username.length() > UserConstants.USERNAME_MAX_LENGTH) {
@@ -111,12 +126,17 @@ public class SysLoginService {
|| password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
throw new ServiceException("密码长度必须在5到20个字符之间");
}
+ if (phonenumber.length() registerResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER);
if (Result.FAIL == registerResult.getCode()) {
@@ -124,4 +144,44 @@ public class SysLoginService {
}
recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功");
}
+
+ public Result getPhoneCode(String phonenumber) {
+
+
+
+// if (StringUtils.isBlank(phonenumber) || !StringUtils.isMatch(phonenumber, "^\\d{11}$")) {
+// return Result.error("手机号为空或无效");
+// }
+
+// String cachedPhonenumber = redisTemplate.opsForValue().get("phonenumber");
+//
+// if (cachedPhonenumber == null || cachedPhonenumber.isEmpty()) {
+//
+// return Result.error("手机号为空");
+// }
+
+//
+// if (redisService.hasKey(phonenumber.length()==11?phonenumber:"0"+phonenumber)){
+// return Result.error("请勿频繁发送验证码");
+// }
+
+ if (StringUtils.isBlank(phonenumber)){
+ return Result.error("手机号不能为空");
+ }
+
+
+ String s = RandomUtil.randomNumbers(4);
+
+
+
+ redisTemplate.opsForValue().set(phonenumber,phonenumber,1,TimeUnit.DAYS);
+
+ TelSmsUtils.sendSms(phonenumber, new HashMap() {{
+ put("实训12A项目注册验证码","你正在注册四组服务,您的验证码是"+s);
+ }});
+
+
+ return Result.success("发送成功");
+ }
+
}
diff --git a/cloud-auth/src/main/java/com/muyu/auth/util/TelSmsUtils.java b/cloud-auth/src/main/java/com/muyu/auth/util/TelSmsUtils.java
new file mode 100644
index 0000000..5513245
--- /dev/null
+++ b/cloud-auth/src/main/java/com/muyu/auth/util/TelSmsUtils.java
@@ -0,0 +1,92 @@
+package com.muyu.auth.util;
+
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.dysmsapi20170525.Client;
+import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
+import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
+import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody;
+import com.aliyun.teaopenapi.models.Config;
+import lombok.extern.log4j.Log4j2;
+
+import java.util.Map;
+
+/**
+ * 短信工具类
+ */
+@Log4j2
+public class TelSmsUtils {
+
+ /**
+ * 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限
+ */
+ private static String accessKeyId = "LTAI5tDbRqXkC5i3SMrCSDcX";
+
+ private static String accessKeySecret = "XUzMZoHPLsjNLafHsdQnMElBWZATsu";
+
+ /**
+ * 短信访问域名
+ */
+ private static String endpoint = "dysmsapi.aliyuncs.com";
+ /**
+ * 短信签名
+ */
+ private static String signName = "乐优购";
+
+ private static String templateCode = "SMS_163851467";
+
+ /**
+ * 实例化短信对象
+ */
+ private static Client client;
+
+ static {
+ log.info("初始化短信服务开始");
+ long startTime = System.currentTimeMillis();
+ try {
+ client = initClient();
+ log.info("初始化短信成功:{}", signName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ log.info("初始化短信服务结束:耗时:{}MS", (System.currentTimeMillis() - startTime));
+ }
+
+ /**
+ * 初始化短信对象
+ *
+ * @return
+ * @throws Exception
+ */
+ private static Client initClient() throws Exception {
+ Config config = new Config()
+ // 您的AccessKey ID
+ .setAccessKeyId(accessKeyId)
+ // 您的AccessKey Secret
+ .setAccessKeySecret(accessKeySecret);
+ // 访问的域名
+ config.endpoint = endpoint;
+ return new Client(config);
+ }
+
+ /**
+ * 发送单条短信
+ *
+ * @param tel
+ */
+ public static SendSmsResponseBody sendSms(String tel, Map sendDataMap) {
+ SendSmsRequest sendSmsRequest = new SendSmsRequest()
+ .setPhoneNumbers(tel)
+ .setSignName(signName)
+ .setTemplateCode(templateCode)
+ .setTemplateParam(JSONObject.toJSONString(sendDataMap));
+ SendSmsResponse sendSmsResponse = null;
+ try {
+ log.info("发送短信验证码:消息内容是:【{}】", JSONObject.toJSONString(sendDataMap));
+ sendSmsResponse = client.sendSms(sendSmsRequest);
+ } catch (Exception e) {
+ log.error("短信发送异常,手机号:【{}】,短信内容:【{}】,异常信息:【{}】", tel, sendDataMap, e);
+ }
+ return sendSmsResponse.getBody();
+ }
+
+}
diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/UserConstants.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/UserConstants.java
index 0df401c..5042414 100644
--- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/UserConstants.java
+++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/UserConstants.java
@@ -110,4 +110,9 @@ public class UserConstants {
public static final int PASSWORD_MIN_LENGTH = 5;
public static final int PASSWORD_MAX_LENGTH = 20;
+
+ /**
+ * 手机号长度限制
+ */
+ public static final int PHONE_MIN_LENGTH = 11;
}
diff --git a/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/config/WebMvcConfig.java b/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/config/WebMvcConfig.java
index 8acde35..114bd18 100644
--- a/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/config/WebMvcConfig.java
+++ b/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/config/WebMvcConfig.java
@@ -13,7 +13,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
/**
* 不需要拦截地址
*/
- public static final String[] excludeUrls = {"/login", "/logout", "/refresh"};
+ public static final String[] excludeUrls = {"/login", "/logout", "/refresh","/getPhoneCode/\\\\d{11}$"};
@Override
public void addInterceptors (InterceptorRegistry registry) {
diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java
index 999b22c..5c2db0c 100644
--- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java
+++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java
@@ -135,6 +135,8 @@ public class SysUser extends BaseEntity {
*/
private Long roleId;
+
+
public SysUser (Long userId) {
this.userId = userId;
}
@@ -170,4 +172,6 @@ public class SysUser extends BaseEntity {
public String getPhonenumber () {
return phonenumber;
}
+
+
}