java如何实现短信验证码登录功能 您所在的位置:网站首页 短信验证码功能怎么实现 java如何实现短信验证码登录功能

java如何实现短信验证码登录功能

2023-12-24 12:09| 来源: 网络整理| 查看: 265

java如何实现短信验证码登录功能 发布时间:2022-03-03 15:17:35 来源:亿速云 阅读:827 作者:小新 栏目:开发技术 自动写代码机器人,免费开通

小编给大家分享一下java如何实现短信验证码登录功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

业务案例

如下所示,是一个大家熟知的采用短信登录的入口

java如何实现短信验证码登录功能

输入手机号之后,出现如下效果,

java如何实现短信验证码登录功能

输入手机上面收到的验证码之后,就可以正常登录了

业务关键点剖析

以上是一个正常的使用短信验证码登录的业务流程,在实际开发中,需要考虑的因素更多了,比如:

验证码位数如何

验证码如何存储

如何预防短信被刷

倒计时功能,前后端如何配合

其实来说,短信验证码功能并不难,难得是如何做到业务场景的全面覆盖和功能细节上面的考虑

短信验证码功能实现思路

小编结合实际经验和调研,目前比较流行的做法是,使用redis做短信验证码,想必说到这里,懂行的同学们应该猜到了

完整的业务逻辑大概如下:

java如何实现短信验证码登录功能

依据这个业务逻辑的实现思路,我们大致可以理清代码的编写逻辑,在小编开发过程中,其中有一个点遇到了一点梗,就是关于验证码的有效期的问题,主要考虑下面2点:

后端存储验证码有效期时长

前端页面倒计时和后端有效期的关系

有效期问题

java如何实现短信验证码登录功能

java如何实现短信验证码登录功能

下面我们编写代码来演示下完整的过程

前置准备:搭建一个springboot工程

操作步骤

1、导入核心依赖

            org.springframework.boot             spring-boot-starter-data-redis                               org.springframework.boot             spring-boot-starter-web             2.2.1.RELEASE         

2、编写获取短信验证码方法

@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 实验室设备网 版权所有