1、手机号校验、生成短信验证码缓存redis、验证短信验证码
import com.ruoyi.common.constant.OpsConstants;
import com.ruoyi.common.entity.ValidateData;
import com.ruoyi.framework.redis.CacheTool;
import net.dreamlu.mica.core.utils.StringPool;
import net.dreamlu.mica.redis.cache.CacheKey;
import org.springframework.util.ObjectUtils;
import java.time.Duration;
public class SmsUtils {
public static final String PHONE_RULES = "^(\\+|00){0,2}(9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\\d{1,14}$";
/**
* 校验手机号
*
* @param phoneNum
* @return
*/
public static boolean checkPhoneNum(String phoneNum) {
return !ObjectUtils.isEmpty(phoneNum) && phoneNum.matches(PHONE_RULES) && checkMobileNum(phoneNum);
}
/**
* 校验手机号
*
* @param mobileNum
* @return
*/
public static boolean checkMobileNum(String mobileNum) {
if (mobileNum.startsWith("1") && mobileNum.length() == 11) {
return true;
} else {
return false;
}
}
/**
* 短信验证码缓存key
*
* @param uuid 手机号
* @return
*/
public static CacheKey getSmsKey(String uuid) {
//格式key:模板标识:手机号
return new CacheKey(OpsConstants.ALISMS_KEY + StringPool.COLON + uuid, Duration.ofMinutes(5));
}
/**
* 生成短信验证码
*
* @param uuid 手机号
* @return
*/
public static ValidateData generateValidateData(String uuid) {
ValidateData validateData = new ValidateData();
String smsCode = CacheTool.getSmsCode(uuid);
validateData.setUuid(uuid);
validateData.setCode(smsCode);
return validateData;
}
/**
* 验证短信验证码
*
* @param uuid 手机号
* @param code 验证码
* @return
*/
public static boolean validate(String uuid, String code) {
return code.equals(CacheTool.getMicaRedisCache().get(getSmsKey(uuid)));
}
}
import lombok.Data;
@Data
public class ValidateData {
/**
* 手机号/唯一标识
*/
private String uuid;
/**
* 验证码
*/
private String code;
}
import com.ruoyi.framework.utils.SmsUtils;
import net.dreamlu.mica.core.spring.SpringContextUtil;
import net.dreamlu.mica.core.utils.$;
import net.dreamlu.mica.core.utils.RandomType;
import net.dreamlu.mica.redis.cache.CacheKey;
import net.dreamlu.mica.redis.cache.MicaRedisCache;
/**
* 缓存工具栏
*/
public class CacheTool {
private static MicaRedisCache micaRedisCache;
public static MicaRedisCache getMicaRedisCache() {
if (micaRedisCache == null) {
micaRedisCache = SpringContextUtil.getBean(MicaRedisCache.class);
}
return micaRedisCache;
}
/**
* 获取短信验证码并缓存
*
* @param uuid 手机号/验证码类型唯一标识
* @return 验证码
*/
public static String getSmsCode(String uuid) {
String code = $.random(6, RandomType.INT);
CacheKey smsKey = SmsUtils.getSmsKey(uuid);
getMicaRedisCache().set(smsKey, code);
return code;
}
}
/**
* 数据库sms模板产量
*/
public class OpsConstants {
/**
* 阿里云policy缓存标识
*/
public static final String ALIOSS_POLICY = "ali:oss_policy";
/**
* 阿里云sms缓存标识
*/
public static final String ALISMS_KEY = "ali:sms_code";
/**
* 验证码
*/
public static final String SMS_TEMPLATE_VALIDATE = "validate";
/**
* 通知
*/
public static final String SMS_TEMPLATE_NOTICE = "notice";
/**
* 推广
*/
public static final String SMS_TEMPLATE_PROMO = "promo";
}
使用
if (ObjectUtils.isEmpty(phone)) {
return fail("手机号不能为空");
}
if (!SmsUtils.checkPhoneNum(phone) && !SmsUtils.checkMobileNum(phone)) {
return fail("手机号码不正确");
}
if (ObjectUtils.isEmpty(code)) {
return fail("验证码不能为空");
}
boolean validated = SmsUtils.validate(phone, code);
if (!validated) {
return fail("验证码错误");
}
maven依赖
<properties>
<mica.version>2.5.4</mica.version> <!-- https://mvnrepository.com/artifact/net.dreamlu/mica-bom -->
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-core</artifactId>
<version>${mica.version}</version>
</dependency>
<dependency>
<groupId>net.dreamlu</groupId> <!-- redis -->
<artifactId>mica-redis</artifactId>
<version>${mica.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
2、后端生成验证码
import cn.hutool.core.util.IdUtil;
import com.ruoyi.common.entity.ValidateData;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.system.setting.security.LoginBody;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.dreamlu.mica.captcha.service.ICaptchaService;
import net.dreamlu.mica.core.result.R;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description 登陆 控制层
*/
@Slf4j
@RestController
@AllArgsConstructor
public class LoginController extends BaseController {
private final ICaptchaService captchaService;
/**
* 生成验证码
*/
@GetMapping("/captchaImage")
public R getCode() {
String uuid = IdUtil.fastUUID();
String img = captchaService.generateBase64(uuid);
ValidateData validateData = new ValidateData();
validateData.setUuid(uuid);
validateData.setCode(img);
return success(validateData);
}
/**
* 用户登陆
*/
@PostMapping("/login")
public R login(@Validated @RequestBody LoginBody loginBody) {
boolean validated = captchaService.validate(loginBody.getUuid(), loginBody.getCode());
if (!validated) {
return fail("验证码错误");
}
//TODO
return success();
}
}
maven依赖
<properties>
<hutool.version>5.7.13</hutool.version> <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<mica.version>2.5.4</mica.version> <!-- https://mvnrepository.com/artifact/net.dreamlu/mica-bom -->
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-captcha</artifactId>
<version>${mica.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
转载请注明出处:BestEternity亲笔。