Java开发完整短信验证码功能的全过程

目录
  • 前言
  • 闲扯
  • 使用技术
  • 所需知识储备
  • 实现步骤
  • 总结

前言

现代互联网项目中,很多场景下都需要使用一种叫做验证码的技术,常用的有图片验证码,滑块验证码,短信验证码等,本文章描述的就是短信验证码的一个使用教程,从0开始完成一个验证码功能的开发。

闲扯

是不是看着导语很高大上!!!

我才不会说是因为最近不知道写啥才水的一篇文章

但是嘛,我要争取做到水文章也水的特别认真,让读者可以根据本文的教程实现验证码功能

使用技术

  • Java:所使用的后端技术
  • JSP:所使用的前端技术
  • 阿里云短信服务:发送短信
  • Redis:存储验证码 实现超时过期以及验证功能

所需知识储备

  • Java基础知识
  • Ajax基础
  • Redis基础

实现步骤

首先我们需要找一个提供短信服务的商户,随便在哪里找都一样,为了避免广告嫌疑我就不在此推荐了,购买商家的短信服务后会拿到一些参数,比如说请求地址,请求方式,token等,如下图所示

然后找到接口的调用样例,按照调用样例传相应的参数即可实现短信发送

这步没什么说的,就是调用API,完成这步之后,就可以发送短信了,当然这个是第一步,距离正式完成还差很远。
这里有一个小的细节,就是我们发送短信,其中这个验证码是我们自己生成的,然后以参数的形式传给接口,所以这里的验证码需要我们自己产生 贴一段产生验证码的代码

// 仅供参考 根据业务去生成即可
	// 生成验证码
	StringBuilder builder = new StringBuilder();
	 for (int i = 0; i < 6; i++) {
	     int random = (int) (Math.random() * 10);
	     builder.append(random);
	 }
	 String code = builder.toString();

第二步要做的操作就是要将第一步发送的验证码,如果发送成功了的话,我们要将该验证码保存起来,方便后续的验证,本人这里使用了SpringBoot整合Redis,直接使用RedisTemplente实现的,和原生实现是类似的,就是将验证码和手机号存入Redis。

	 // 其中的ResultEntity是我个人封装的一个返回结果 保存的是发送短信的结果 成功则存入Redis
	 // setRedisKeyValueRemoteWithTimeOut 是自己封装的一个方法 功能为存入redis并且设置超时时间
	 // 发送验证码到phoneNum 获取结果
	 ResultEntity<String> resultEntity = CrowdUtil.sendCodeShortMessage(
	         messageProperties.getHost(),
	         messageProperties.getPath(),
	         messageProperties.getMethod(),
	         phoneNum,
	         "注册",
	         messageProperties.getAppCode(),
	         messageProperties.getSmsSignId(),
	         messageProperties.getTemplateId());
	 if (ResultEntity.SUCCESS.equals(resultEntity.getResult())) {
	     // 验证码
	     String code = resultEntity.getData();
	     // 设置key
	     String key = CrowdConstant.REDIS_CODE_PREFIX + phoneNum;
	     // 如果成功则将验证码存入Redis 过期时间300秒 获取存入redis的结果
	     ResultEntity<String> saveCodeResultEntity = redisRemoteService.setRedisKeyValueRemoteWithTimeOut(key, code, 300, TimeUnit.SECONDS);
	     if (ResultEntity.SUCCESS.equals(saveCodeResultEntity.getResult())) {
	         return ResultEntity.successWithoutData();
	     } else {
	         return saveCodeResultEntity;
	     }

第三步实现短信验证码的验证

这步骤实现的功能就是验证短信验证码是否匹配,这步骤核心操作就是将验证码从Redis中取出来,和前端传过来的数据进行比对,贴代码

		// 可以无视其中的一些拼接操作,这些拼接操作就是做一下标识,作为key。
		// 核心是getRedisStringValueByKeyRemote方法 作用为获取Redis中的验证码
		// 这里有一个注意事项就是验证码使用过一次后需要删除redis中的数据,避免二次验证造成的数据不安全。
        // 获取手机号
        String phoneNum = memberVO.getCardnum();
        // 拼接redis中的key
        String key = CrowdConstant.REDIS_CODE_PREFIX + phoneNum;
        // 根据key查询redis 返回resultEntity 将value存入data
        ResultEntity<String> redisResultEntity = redisRemoteService.getRedisStringValueByKeyRemote(key);
        // 获取结果集
        String result = redisResultEntity.getResult();

        if (ResultEntity.FAILED.equals(result)) {
            modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, redisResultEntity.getMessage());
            return "member-reg";
        }
        // 获取redis的验证码
        String redisCode = redisResultEntity.getData();

        if (redisCode == null) {
            modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, CrowdConstant.MESSAGE_CODE_NOT_EXISTS);
            return "member-reg";
        }
        // 获取输入的验证码
        String code = memberVO.getCode();

        if (!Objects.equals(redisCode, code)) {
            modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, CrowdConstant.MESSAGE_CODE_FAILED);
            return "member-reg";
        }
        // 删除redis中数据
        redisRemoteService.removeRedisKeyRemote(key);

到这里我们验证码几乎就结束了,已经实现了流程,由于我的那个验证码套餐过期了,本人又十分贫穷,就没有测试样例啦,但是保证是可用的,前端调用方式直接一个Ajax请求调用发送验证码存储redis,然后在例如测试或登录的业务中,去匹配验证码即可。接下来给几点拓展,各位可以自己实现

  1. 实现控制单手机号一天只能发送三条消息。
  2. 实现控制单ip一天只能发送是三条消息
  3. 实现消息60秒不能重复发送

总结

到此这篇关于Java开发完整短信验证码功能的文章就介绍到这了,更多相关Java短信验证码功能内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java 随机生成6位短信验证码实例代码

    生成6位随机数字其实很简单,只需一行代码,具体如下: String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000); 具体实现发送短信验证码功能,以注册为例,其实现代码如下: 这里需要用到第三方短信验证码接口,这里用到的是乐信短信验证码接口,乐信接口API文档说明(http://www.lx598.com/apitext.html),乐信java调用短信验证码接口 demo(http://www.lx598.c

  • Java随机生成手机短信验证码的方法

    本文实例讲述了Java随机生成手机短信验证码的方法.分享给大家供大家参考,具体如下: /** * 创建指定数量的随机字符串 * @param numberFlag 是否是数字 * @param length * @return */ public static String createRandom(boolean numberFlag, int length){ String retStr = ""; String strTable = numberFlag ? "1234

  • Java实现发送短信验证码功能

    一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在Java中使用HttpClient模拟POST请求或者GET请求(看短信平台要求,一般的情况下都是POST请求),调用短信平台提供的接口(遵循短信平台的接口规范即可).具体看代码: 使用HttpClient的时候需要在项目中引入: commons-httpclient-3.1.jar 这个jar包, 项目结构: 1.创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法 /** * 文件说明 * @Descriptio

  • Java使用云片API发送短信验证码

    下面开始介绍的是如何利用机器完成批量操作,将短信业务自动化. 获取APIKEY 云片网提供了完整的SDK和API,可以帮助开发者快速完成业务开发. 在开始Coding前,需要先获取APIKEY,如下所示. 获取APIKEY 点击眼睛按钮后,输入验证码,就可以查看APIKEY了. 这里需要说明的是,APIKEY特别重要,一定要保护好它,避免泄露.云片这边提供了几重保护机制,例如验证.敏感处理.子账号独立APIKEY等,看得出来他们的安全意识还是挺不错的. 开始Coding 有了APIKEY,就可以

  • java短信验证码获取次数限制实例

    现在不管什么项目,用到短信验证功能,都会在程序上设计一个短信验证码的获取次数限制,这样主要是避免短信验证码接口被刷. 前一段正好做一个项目的用户短信验证码登录功能,就研究了以下,下面贴出来分享一下. 这里涉及到的短信接口,用的第三方短信接口-动力思维思维乐信的(http://www.lx598.com/),如果想了解短信接口接入,可以到他们官网,查看下短信接口API文档说明,参考下面的代码应该就能弄明白. 用户注册部分,主要代码如下: //主要js方法: //获取手机验证码: function

  • JAVA实现利用第三方平台发送短信验证码

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能. 发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较. 为了防止有广告嫌疑

  • java实现短信验证码5分钟有效时间

    本文实例为大家分享了java实现短信验证码5分钟有效时间,供大家参考,具体内容如下 实现一个发送短信验证码的请求,要求5分钟之内重复请求,返回同一个验证码. 网上可找到几种方案: 如,存储数据库或缓存中.实现起来比较麻烦,舍弃: 另一种方式即本例,使用session存储.其他方式,暂未进一步了解. 实现步骤: (springmvc) 1.controller中,获取session对象,取code,取不到新生成,并存储session中: 2.单手机号发送量,判断并 +1 记入数据库: 3.Time

  • Java实现短信发送验证码功能

    1:新建maven工程 2:开通腾讯云的短信服务功能,添加应用. 3:配置短信签名.短信正文模板,并审核通过(为了方便我就用微信公众号) 4:添加发送短信引用的腾讯云jar包 <dependency> <groupId>com.github.qcloudsms</groupId> <artifactId>qcloudsms</artifactId> <version>1.0.2</version> </depende

  • java实现发送短信验证码

    最近用学习了一下调用第三方接口发送短信验证码的程序,希望能够帮助到大家. 1.首先下图为项目的目录结构,需要带入三个包: commons-httpclient-3.1.jar commons-logging-1.0.4.jar codec-1.3.jar 2.其次要创建模拟POST.GET请求的工具类: package com.demo.util; import java.io.IOException; import java.util.Map; import org.apache.common

  • Java开发完整短信验证码功能的全过程

    目录 前言 闲扯 使用技术 所需知识储备 实现步骤 总结 前言 现代互联网项目中,很多场景下都需要使用一种叫做验证码的技术,常用的有图片验证码,滑块验证码,短信验证码等,本文章描述的就是短信验证码的一个使用教程,从0开始完成一个验证码功能的开发. 闲扯 是不是看着导语很高大上!!! 我才不会说是因为最近不知道写啥才水的一篇文章 但是嘛,我要争取做到水文章也水的特别认真,让读者可以根据本文的教程实现验证码功能 使用技术 Java:所使用的后端技术 JSP:所使用的前端技术 阿里云短信服务:发送短信

  • Java实现发送短信验证码+redis限制发送的次数功能

    java实现短信验证码发送,由于我们使用第三方平台进行验证码的发送,所以首先,我们要在一个平台进行注册.这样的平台有很多,有的平台在新建账号的时候会附带赠几条免费短信.这里我仅做测试使用(具体哪个平台见参考三,很简单,注册账号就行,记得添加短信签名). 另外,在实际项目中,如果有人恶意攻击,不停的发送短信验证码,就会造成很大的损失.故对发送次数做一定的限制就非常必要,这里我们限制一个手机号一天可以发多少短信和短信平台无关. 这里采用的是存redis来实现这一个功能.就是每次调用发送验证码这个接口

  • Android中用Bmob实现短信验证码功能的方法详解

    这篇文章主要介绍发送验证码和校验验证码的功能,用到一个第三方平台Bmob,那Bmob是什么呢?Bmob可以开发一个云存储的移动应用软件,他提供了大量的标准的API接口,根据需要接入相关服务,开发者可以更加专注于应用的开发,让产品交付更快速,验证码功能就是其中一个. 一.跟其他第三方一样,我们开发之前要做一些准备工作. 1.首先,去官网注册一个帐号:http://www.bmob.cn/: 2.然后就可以创建应用了:具体怎么做Bmob说得很清楚了(官方操作介绍),如果你不想看,我简单说一下:点击右

  • SpringSceurity实现短信验证码功能的示例代码

    一.思考 1.设计思路 在获取短信验证码功能和图形验证码还是有很多相似的地方,所以这里在设计获取短信验证的时候,将之前开发好的的图形验证码进一步整合.抽象与重构. 在获取验证码的时候,它们最大的不同在于: 图形验证码是通过接口返回获取給前端.而短信验证码而言是通过第三方API向我们手机推送. 但是它们在登陆的时候就有很大的不同了,对于图形验证码而言验证通过之前就走UsernamePasswordAuthenticationFilter 过滤器了开始校验用户名密码了. 但对于短信登陆而言,确实也需

  • Android自动填充短信验证码功能(demo)

    项目需求: Android开发中用户登录往会用到短信验证的功能,如果让用户先查看短信,然后再回到界面填写验证码,用户体验不是很好,有时就需要实现验证码的自动填写功能. 做法: 我以前的做法是先创建一个广播接收器,接受短信变化的广播,收到广播时,再把验证码提取出来. 那时有用户测试反馈他的手机安装了其他一些短信应用或者手机本身限制了权限的情况下,这种方式可能起不了作用,即使把优先级设高,也不能保证不会被别的应用抢先. 以前用户卸载掉第三方软件后,就没再追究了. 现在发现可以通过监听短信数据库的方式

  • 用MOB实例开发实现短信验证功能

    相信有很多朋友在做三方登陆的时候会加入短信验证的功能,最近刚好被分配安排实现这一需求,本人新手一枚,特地去网上搜了资料,目前用的比较多的大汉.云通讯还有MOB的smssdk,对比之下,最终选择了完全免费的MOB产品试试手,下面就是我在使用sdk过程中一些心得,希望看到的大神给点建议,喜欢的给个小心心就好. 首先我上网百度了下Mob的官网(http://www.mob.com/)作为第一次使用习惯性的先打开文档介绍,关于使用方法这里介绍的算是比较详细的,我这里也不做赘述了,整个文档浏览了一遍,介绍

  • Spring MVC 中 短信验证码功能的实现方法

    在外部网站中短信的验证很有必要,比如在实现注册.验证用户信息等的情况下.在SpringMVC中的实现如下: 短信接口 短信接口,有些企业会购买的有移动的短信平台接口.如果是个人或者是小企业可以使用一些云服务的.比如百度的API Store上面的. 我使用的是:http://apistore.baidu.com/apiworks/servicedetail/1018.html 当然短信接口肯定都是要付费的,而且是基于模板的,具体的使用说明可以看这个网址里面的使用说明. 前端界面 前端的界面,可能如

  • Vue.js实现移动端短信验证码功能

    现在的短信验证码一般为4位或6位,则页面中会相应的显示4个或6个文本框,如图所示 当点击注册进入到输入验证码页面的时候,第一个框自动获取光标,依次输入,不可直接输入第三个或第四个框的值, input输入框是循环出来的,代码如下: <div class="sms_input"> <div v-for="n in sms.numbers-1"><input v-if="sms.show[n-1]" disabled=&q

  • jQuery实现倒计时重新发送短信验证码功能示例

    本文实例讲述了jQuery实现倒计时重新发送短信验证码功能的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html> <head> <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <script type="text/javascript"> var countdown

随机推荐