Redis缓存验证码

通常项目中,在进行登录或者查看一些数据私密度高的数据的时候都需要去额外的校验一下

步骤

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;

}

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值