From 81dca23c275d3bd111a07d925f8bf6cf0c22dd2a Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 25 Apr 2023 11:06:36 +0800
Subject: [PATCH] 短信验证码发送优化,添加手机号码校验
---
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java | 74 +++++++++++++++++++++++++++++-------
1 files changed, 59 insertions(+), 15 deletions(-)
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
index 5fc83a9..d28a4f1 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
@@ -5,12 +5,17 @@
import cn.gistack.sm.sms.entity.SmsRecord;
import cn.gistack.sm.sms.service.ISmsRecordService;
import cn.gistack.sm.sms.util.SmsUtils;
+import cn.gistack.system.user.entity.User;
+import cn.gistack.system.user.feign.IUserClient;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import static cn.gistack.common.cache.CacheNames.PHONE_KEY;
/**
@@ -26,8 +31,9 @@
private final ISmsRecordService smsRecordService;
-
private final BladeRedis bladeRedis;
+
+ private final IUserClient userClient;
@GetMapping("/test")
public void setRedis(){
@@ -36,26 +42,64 @@
/**
* 发送登录验证码
- * request 必须包含手机号(多个手机号以英文逗号分隔)
+ * request 必须包含手机号
* @param request
* @return
*/
@PostMapping("/sendCode")
public R test(@RequestBody SMSSendRequest request){
- //设置模板相关信息
- String templateId = "2431012205498";
- String randNumber = SmsUtils.getRandNumber();
- String content = "您的登录验证码是" + randNumber + ",5分钟内有效,请勿泄漏,如非本人操作,请忽略此信息";
- request.setMessageContent(content);
- request.setTemplateId(templateId);
- // 发送操作
- String sendMsg = SmsUtils.sendMsg(request);
- // 记录发送记录操作
- saveSendRecord(request,sendMsg);
- // 保存验证码到 redis
- saveCodeForRedis(request.getUserNumber(),randNumber);
+ // 手机号码校验
+ if(validatePhone(request.getUserNumber())) {
+ //设置模板相关信息
+ String templateId = "2431012205498";
+ String randNumber = SmsUtils.getRandNumber();
+ String content = "您的登录验证码是" + randNumber + ",5分钟内有效,请勿泄漏,如非本人操作,请忽略此信息";
+ request.setMessageContent(content);
+ request.setTemplateId(templateId);
+ // 发送操作
+ String sendMsg = SmsUtils.sendMsg(request);
+ // 记录发送记录操作
+ saveSendRecord(request, sendMsg);
+ // 保存验证码到 redis
+ saveCodeForRedis(request.getUserNumber(), randNumber);
+ // 返回发送信息
+ return R.data(sendMsg);
+ }
// 返回发送信息
- return R.data(sendMsg);
+ return R.fail(400,"该手机号不存在!");
+ }
+
+ /**
+ * 校验手机号码正确性
+ * @param userNumber
+ * @return
+ */
+ private boolean validatePhone(String userNumber) {
+ // 校验手机号码正确性
+ if (validator(userNumber)){
+ // 校验该账户是否已注册,通过手机号查询用户是否存在,tenantId 暂时写死,未登陆情况 tenantId 获取不到
+ R<List<User>> list = userClient.userInfoByPhone("000000", userNumber);
+ if (list.getData().size()>0){
+ return true;
+ }
+ return false;
+ }
+ return false;
+ }
+
+ /**
+ * 校验手机号码
+ */
+ public static boolean validator(String phone) {
+ String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
+ if (phone.length() != 11) {
+ return false;
+ } else {
+ Pattern p = Pattern.compile(regex);
+ Matcher m = p.matcher(phone);
+ boolean isMatch = m.matches();
+ return isMatch;
+ }
}
/**
--
Gitblit v1.9.3