Java Redis 短信验证码发送处理

场景:

用户登录使用手机号码+短信验证登录。

用户点击发送验证码。

用户接收到验证码后输入验证码进行登录。

大致逻辑:

1.已手机号码为维度,发送一条验证码以手机号码做KEY,验证码做Value,进行存储。并且只存储最新的一条。

2.验证码过时,一条验证码有效使用时间:5分钟,超时既无效。验证码使用后无效。

这里使用Redis进行验证。

发送短信:

添加到Redis中,设置过期时间300秒。

jedis.setEx(mobiles, 300, code);

这里,如果再次发送,Redis会覆盖之前的数据。

验证:

根据手机号码作为KEY,从Redis中获取验证码。

String code = jedis.get(mobiles);
// 验证码不存在
if(null == code) {
    return false;
}
// 判断验证码是否一致
if(code.equals(inpuCode)) {
    // 删除缓存中的验证码
    jedis.del(mobiles);
    return true;
}
return false;

 

还有一个逻辑是60s后重发的问题。

为了防止恶意发送验证码:

1.根据ip进行限制,依赖Redis的过期设置,验证码发送成功之后,ip作为key,存储60s。下次再发送验证码的时候,判断ip是否存在,Redis中的exists方法可以判断。如果存在就不发送。

2.根据手机号码进行验证。方法和ip一样。

还有其它方案的朋友可以一起讨论一下。

 

posted @ 2018-08-23 11:18  Se7end  阅读(990)  评论(0编辑  收藏  举报