1.短信发送

首先我们平时使用短信验证信息的时候一般都是这样的表单,首先需要我们用户输入手机号码,然后点击获取验证码按钮,这时候获取验证码的按钮需要请求我们的后端接口并携带用户的手机号给后端

2.后端接收到手机号并发送验证码

    public boolean sendCode(String mobile) {if(redisLock.tryLock("sdfsdf", 50)) {try {String authCode = String.valueOf(getRandNum(1, 999999));System.out.println(authCode);log.info("测试验证码:"+authCode);myRedis.set(mobile, authCode, 300);boolean f = sendAuthCode(mobile, authCode);return f;}finally {redisLock.unlock("sdfsdf");}}throw new ApiException("操作頻繁", 500);}

(1)首先使用

String authCode = String.valueOf(getRandNum(1, 999999));

生成6位数的验证码然后把生成的验证码存入dedis中, myRedis.set(mobile, authCode, 300);

redis的key是用户的手机号码,value是生成的验证码,并设置该验证码只在redis中存在300秒

(2)然后调用发送短信的方法或者接口,我这里把发送短信的方法封装成了sendAuthCode(mobile,authCode)方法,这一步完成了向用户手机发送验证码的步骤。

注意提醒:这里需要使用redisLock来对发送验证码的进行相应的限制,第一个验证码发送之后的50秒内不允许再次发送验证码。

这时候就有人会有疑问了,这样是不是多此一举,前端的发送验证码的按钮一般都会有倒计时60秒的功能,60秒之内是变成灰色,不让用户点击的。后端用lock的目的就是为了防止有心之人恶意调取我们的接口。

3.接收验证码并验证

当我们前端的用户填写好了验证码之后,http请求需要把我们用户的手机号码+验证码发送到我们的后端

    @RequestMapping(value = "/checkSetMeal.json", method = RequestMethod.POST, consumes = Constants.APPLICATION_JSON, produces = Constants.APPLICATION_JSON)public ApiResult<Map<String, Object>> checkSetMeal(@RequestBody HandleDTO handleDTO) {Map<String, String> map = new HashMap<String, String>();map = handleDTO.getContractInfo();String _code_ = map.get("_code_");String _name_mobile_ = map.get("_name_mobile_");if (_code_!=null&&_code_!=""&&_name_mobile_!=null&&_name_mobile_!="") {String redisCode = redis.get(_name_mobile_);if (_code_ != null && !"".equals(_code_)) {if (_code_.equals(redisCode)) {redis.del(_name_mobile_);return doCheckSetMeal(handleDTO, CmmcSource.OLD_PLATFORM.getType());}return ApiResult.fail("验证码错误", 403);}return ApiResult.fail("验证码错误", 403);}return doCheckSetMeal(handleDTO, CmmcSource.OLD_PLATFORM.getType());}

我们先获取验证码和手机号码,首先判断两个是否为空,若为空则执行其他代码,若不为空,则需要进行短信验证码的验证工作。

首先我们需要从redis中取出之前存入的验证码,String redisCode = redis.get(_name_mobile_);

然后从redis中取出的验证码和用户输入的验证码进行核对,若核对正确则需要把在redis中的验证码删除redis.del(_name_mobile_).

总结:

我们会发现验证码的发送、验证,在逻辑上没有上面困难点。

不过我们还需注意一下几点:

1.前面的redislock的运用,保证我们短信发送接口的安全。

2.Redis来储存验证码,验证码需要在300秒之后自动删除

3.接收前端传来的手机号和验证码之后需要取出Redis中的验证码

4.若短信验证成功,则需要注销该手机号对应的验证码 在Redis中存储的结构为

PhoneNumber--code    就是Redis中的Key-value

关于Redis的使用请关注我的下一篇博客

短信验证码的发送、接收验证流程相关推荐

  1. 短信验证码总是发送失败是什么原因?

    有些用户在使用某产品时可能会出现短信验证码收不到的情况,同事之前也遇到过这样的情况,连续发送多次依然收不到短信.那么短信验证码为什么会发送失败.原因有哪些呢.#短信验证码安全 现在短信验证码服务在各种 ...

  2. java短信验证码失效时间_Java实现短信验证码--设置发送间隔时间,以及有效时间(Java+Redis)...

    Java实现短信验证码--设置发送间隔时间,以及有效时间(Java+Redis) 这篇文章,实现了Java发送手机短信验证码发送的间隔时间,以及手机验证码的有效时间和手机验证码格式的合法性验证,可以防 ...

  3. Java设置短信间隔时间_Java实现短信验证码--设置发送间隔时间,以及有效时间(Java+Redis)...

    标签:url   control   operation   短信验证码   reg   cep   ppi   任务   用户 Java实现短信验证码--设置发送间隔时间,以及有效时间(Java+R ...

  4. php 阿里云短信服务及阿里大鱼实现短信验证码的发送

    阿里云短信服务 一:使用阿里云的短信服务 ① 申请短信签名 ②申请短信模板 ③创建Access Key,获取AccessKeyId 与 AccessKeySecret.(为了安全起见,这里建议使用子用 ...

  5. java中验证码发送_实现短信验证码的发送[JAVA]

    如何实现短信验证码的发送 一.基础知识补充 1.编码 2.URL 3.字节流与字符流 二.短信验证码编程实现 一.基础知识补充 1.编码 常见的编码:UTF-8 GBK Unicode GB2312 ...

  6. springboot + mybatis-plus短信验证码每天发送次数

    springboot + mybatis-plus设置短信验证码每天发送次数 思路:(例如每天限制发送5次验证码) 1.首先我们要有相应的字段,个人建议:创建数据表(id,phone,amount,s ...

  7. 用Laravel Sms实现 laravel短信验证码的发送

    阿里云短信服务 使用Laravel Sms这个扩展包实现短信验证码的发送,这里以阿里云的短信服务为例: 首先,要创建短信签名和短信模板,具体申请详情如下, 接下来,需要创建AccessKey,由于Ac ...

  8. 注册简单流程及短信验证码的发送

    一.书写前端页面并前端验证 1.对于注册页面进行排版布局 <label class="control-label">手机号:</label><inpu ...

  9. java短信验证码功能发送的验证码如何校验_企业如何选择短信平台才能保障安全和稳定性?...

    现如今互联网不断发展,人们对网络的依赖性越来越大, 伴随而来的网络运营安全问题越来越严重,安全是我们企业都担忧的一个大问题,短信平台的安全性再次被企业所重视起来. 短信验证码日常生活中经常遇到,比如银 ...

  10. Java结合腾讯云实现短信验证码的发送

    今天说说短信验证码 保姆级教程 由于现在阿里云个人账户是不允许个人账户申请签名和模板的,所有下面我们用腾讯云来实现发送验证的功能.首次注册白嫖200条国内短信 第一步: 申请签名:进入腾讯云官网,注册 ...

最新文章

  1. 开源交互式自动标注工具EISeg
  2. win7 storm搭建
  3. python3.6 - threading 多线程编程进阶,线程间并发控制(2)
  4. centos php 错误日志,centos系统下错误日志保存在哪里
  5. 【CodeForces - 124C】Prime Permutation(数学,思维,小结论)
  6. 给matlab图加图注,matlab学习5-数据可视化4-gai.ppt
  7. 四大招让无处不在的工作空间成为可能?揭秘Ivanti 的战略布局
  8. android开发 视图联动_android开发_ViewGroup(组视图)-- 五大布局
  9. 查看zookeeper注册了哪些服务
  10. python-实现栈结构
  11. GDAL库调试(包括跨语言调试)
  12. USACO全部月赛及GateWay数据
  13. PHP 生成 ppt,PHP导出PPT方法,PowerPoint/PhpPresentation处理
  14. 使用media player和foobar的DLAN服务
  15. JUCE入门级教程01——界面设计(细分12块)
  16. javaweb项目实训总结_JAVA WEB实训总结
  17. 银河麒麟高级服务器操作系统V10下载安装及安装docker
  18. java身份证号/手机号隐藏中间几位
  19. python是一种解释型、面向什么的计算机程序设计语言_python语言是一种什么类型...
  20. 组织行为学笔记(3)——情绪和心情

热门文章

  1. PS教程:利用灰度蒙版实现无级调节
  2. 时钟周期 指令周期 MIPS CPI
  3. C语言求阶乘尾数零的个数
  4. Python简单电影推荐算法原理实现
  5. Invalid url-pattern /admin/*.jsp in filter mapping
  6. 什么云服务器可以挂虚拟鼠标,云服务器 模拟鼠标
  7. 争冠,在路上?还是渐行渐远?
  8. 精益创业:创业2年被京东收购、今夜酒店特价创始人任鑫的反省
  9. 景区大数据可视化交互系统-全方位旅游服务平台,打造景区信息数据管理分析平台
  10. oracle中字符串长度计算,根据 oracle 标准计算超长字符串的长度