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一样。
还有其它方案的朋友可以一起讨论一下。
作者:Se7end
声明:本博客文章为原创,只代表本人在工作学习中某一时间内总结的观点或结论。转载时请在文章页面明显位置给出原文链接。