验证模块添加发送短信验证码和验证短信验证码

--CaptchaService.java 新增发送短信验证码和验证短信验证码方法定义
--CaptchaServiceImpl.java 实现新定义定义的方法
--RedisKeys.java 添加短信验证码key
This commit is contained in:
剑雨
2025-05-15 21:45:33 +08:00
parent e4194cdf4d
commit 0509ddb129
3 changed files with 53 additions and 1 deletions
@@ -117,4 +117,12 @@ public class RedisKeys {
public static String getAgentAudioIdKey(String uuid) {
return "agent:audio:id:" + uuid;
}
/**
* 获取短信验证码的缓存key
*/
public static String getSMSValidateCodeKey(String phone) {
return "sms:Validate:Code:" + phone;
}
}
@@ -18,10 +18,21 @@ public interface CaptchaService {
/**
* 验证码效验
*
* @param uuid uuid
* @param code 验证码
* @return true:成功 false:失败
*/
boolean validate(String uuid, String code);
/**
* 发送短信验证码
* @param phone 手机
*/
void sendSMSValidateCode(String phone);
/**
* 验证短信验证码
* @param phone 手机
*/
boolean validateSMSValidateCode(String phone,String code);
}
@@ -1,6 +1,7 @@
package xiaozhi.modules.security.service.impl;
import java.io.IOException;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.StringUtils;
@@ -17,6 +18,7 @@ import jakarta.servlet.http.HttpServletResponse;
import xiaozhi.common.redis.RedisKeys;
import xiaozhi.common.redis.RedisUtils;
import xiaozhi.modules.security.service.CaptchaService;
import xiaozhi.modules.sms.service.SmsService;
/**
* 验证码
@@ -25,6 +27,8 @@ import xiaozhi.modules.security.service.CaptchaService;
public class CaptchaServiceImpl implements CaptchaService {
@Resource
private RedisUtils redisUtils;
@Resource
private SmsService smsService;
@Value("${renren.redis.open}")
private boolean open;
/**
@@ -66,6 +70,35 @@ public class CaptchaServiceImpl implements CaptchaService {
return false;
}
@Override
public void sendSMSValidateCode(String phone) {
String key = RedisKeys.getSMSValidateCodeKey(phone);
String validateCodes = generateValidateCode(6);
setCache(key,validateCodes);
//发送验证码短信
smsService.sendVerificationCodeSms(phone,validateCodes);
}
@Override
public boolean validateSMSValidateCode(String phone,String code) {
String key = RedisKeys.getSMSValidateCodeKey(phone);
return validate(key, code);
}
/**
* 生成指定数量的随机数验证码
* @param length 数量
* @return 随机码
*/
private String generateValidateCode(Integer length) {
String chars = "0123456789"; // 字符范围可以自定义:数字
Random random = new Random();
StringBuilder code = new StringBuilder();
for (int i = 0; i < length; i++) {
code.append(chars.charAt(random.nextInt(chars.length())));
}
return code.toString();
}
private void setCache(String key, String value) {
if (open) {
key = RedisKeys.getCaptchaKey(key);