java如何实现短信验证码登录功能 | 您所在的位置:网站首页 › 短信验证码功能怎么实现 › java如何实现短信验证码登录功能 |
java如何实现短信验证码登录功能
发布时间:2022-03-03 15:17:35
来源:亿速云
阅读:827
作者:小新
栏目:开发技术
自动写代码机器人,免费开通
小编给大家分享一下java如何实现短信验证码登录功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 业务案例如下所示,是一个大家熟知的采用短信登录的入口 输入手机号之后,出现如下效果, 输入手机上面收到的验证码之后,就可以正常登录了 业务关键点剖析以上是一个正常的使用短信验证码登录的业务流程,在实际开发中,需要考虑的因素更多了,比如: 验证码位数如何 验证码如何存储 如何预防短信被刷 倒计时功能,前后端如何配合 其实来说,短信验证码功能并不难,难得是如何做到业务场景的全面覆盖和功能细节上面的考虑 短信验证码功能实现思路小编结合实际经验和调研,目前比较流行的做法是,使用redis做短信验证码,想必说到这里,懂行的同学们应该猜到了 完整的业务逻辑大概如下: 依据这个业务逻辑的实现思路,我们大致可以理清代码的编写逻辑,在小编开发过程中,其中有一个点遇到了一点梗,就是关于验证码的有效期的问题,主要考虑下面2点: 后端存储验证码有效期时长 前端页面倒计时和后端有效期的关系 有效期问题下面我们编写代码来演示下完整的过程 前置准备:搭建一个springboot工程 操作步骤1、导入核心依赖 org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-web 2.2.1.RELEASE2、编写获取短信验证码方法 @Service public class SmsServiceImpl implements SmsService { public static final String VERIFY_CODE = "login:verify_code:"; @Autowired private DbUserMapper dbUserMapper; @Autowired private RedisTemplate redisTemplate; @Override public String getSmsVerifyCode(String phone) { if (StringUtils.isEmpty(phone)) { throw new RuntimeException("用户手机号为空"); } QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("mobile",phone); DbUser dbUser = dbUserMapper.selectOne(queryWrapper); if(dbUser == null){ throw new RuntimeException("用户不存在"); } String smsVerifyCode = getSmsVerifyCode(); String smsCodeKey = VERIFY_CODE + dbUser.getUserId(); String existedSmsCode = redisTemplate.opsForValue().get(smsCodeKey); //如果验证码已经存在时 if (StringUtils.isNotEmpty(existedSmsCode)) { Long expireTime = redisTemplate.opsForValue().getOperations().getExpire(smsCodeKey); long lastTime = 60 * 3 - expireTime; //三分钟内验证码有效,1分钟到3分钟之间,用户可以继续输入验证码,也可以重新获取验证码,新的验证码将覆盖旧的 if(lastTime > 60 && expireTime >0){ //调用第三方平台发短信,只有短信发送成功了,才能将短信验证码保存到redis System.out.println("此处调用短信发送逻辑......"); redisTemplate.opsForValue().set(smsCodeKey, smsVerifyCode, 60 * 3, TimeUnit.SECONDS); System.out.println("短信验证码:" + smsVerifyCode); } //一分钟之内不得多次获取验证码 if(lastTime |
CopyRight 2018-2019 实验室设备网 版权所有 |