赞
踩
通常项目中,在进行登录或者查看一些数据私密度高的数据的时候都需要去额外的校验一下
步骤
1.生成6位数随机验证码
2.将验证码和手机号存储在Redis缓存中
3.发送短信,用户接受短信,在指定时间填写正确验证码
4.接受前端传过来的验证码,取出Redis缓存中的验证码进行对比
5.根据对比结果,超时,填写错误,正确,返回不同的状态,校验通过则进行下一步,否则重新进行第一步
//设置验证码长度6位
private final static String EsConstants.RedisCode.CAPTCHA_LENGTH = "6";
//发送验证码,并将验证码,手机号存到Redis
@Override
public JSONObject textCaptcha(String phoneNum) {
JSONObject jsonObject = new JSONObject();
//生成验证码(设置长度为6)
StringBuilder textCode = new StringBuilder(EsConstants.RedisCode.CAPTCHA_LENGTH);
for (int i = 0; i < EsConstants.RedisCode.CAPTCHA_LENGTH; i++) {
//没循环一次,生成一个1到10的随机数,转成string,拼接到StringBuilder上面
String ch = new Random().nextInt(10) + "";
textCode.append(ch);
}
redisHelper.setCurrentDatabase(2);
//redis存值,将手机号,验证码存到Redis里面
//设置对应的key和value,验证码作为value存进去
redisHelper.strSet(EsConstants.RedisCode.HRECC_PREFIX +EsConstants.RedisCode.MODULE_PREFIX +
EsConstants.RedisCode.CAPTCHA + phoneNum,
textCode.toString(),
5 * 60L,
TimeUnit.SECONDS);
//存完值之后需要恢复默认redis库
redisHelper.clearCurrentDatabase();
Map paramMap = new HashMap();
paramMap.put("captcha", textCode);
//发送短信
JSONObject messageResult = hreccRemoteService.sendMessageTemplate(phoneNum, EsConstants.MessageTemplate.CAPTCHA, JSON.toJSONString(paramMap));
jsonObject.put("status", "success");
jsonObject.put("message", messageResult);
//返回短信结果
return jsonObject;
}
//接受验证码,从Redis里面取出验证码,手机号,与前端传进来的验证码
手机号相比较,校验是否正确
@Override
public JSONObject checkCaptcha(String phoneNum, String captcha) {
Assert.notNull(captcha, "短信验证码不能为空");
redisHelper.setCurrentDatabase(2);
//根据存Redis的参数,取出验证码
//根据存进去的key取出对应的value,也就是验证码
String redisStr = redisHelper.strGet(EsConstants.RedisCode.HRECC_PREFIX + EsConstants.RedisCode.MODULE_PREFIX +
EsConstants.RedisCode.CAPTCHA + phoneNum);
redisHelper.clearCurrentDatabase();
JSONObject jsonObject = new JSONObject();
//超时未填写,传进来是空的,报超时
if (redisStr == null) {
jsonObject.put("status", "fail");
jsonObject.put("message", "验证码超时,请重新发送");
} else if (redisStr.equals(captcha)) {//从Redis取出相等,校验通过
jsonObject.put("status", "success");
jsonObject.put("message", "验证成功");
} else {
jsonObject.put("status", "fail");
jsonObject.put("message", "验证码输入错误");
}
return jsonObject;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。