短信验证码

  短信验证码都是调用一些接口来进行短信的发送,短信验证码在登录、注册等操作中使用的最广泛,本文这一节演示如何使用Java制作一个简单的短信验证码登录。

  我这里演示使用的是聚合数据的短信接口(并非广告),因为聚合数据的接口调用比较方便和简单,所以首先得先去聚合数据里申请一个短信接口API:

发送短信验证码和邮箱验证码—Java实现_第1张图片

发送短信验证码和邮箱验证码—Java实现_第2张图片


申请时会需要你进行实名认证,如果你不想认证的话跳过认证也是可以的。


申请完短信API进入以下界面后点击“模板”:

发送短信验证码和邮箱验证码—Java实现_第3张图片


  需要先申请一个短信模板,根据自己的需求定义这个模板内容(定义前先阅读此页面下方的模板规则说明):

发送短信验证码和邮箱验证码—Java实现_第4张图片


提交审核后,在此页面的下方可以看到模板列表和模板的审核状态:

5.png


然后点击“我的数据”,再点击短信API服务中的“接口”:

发送短信验证码和邮箱验证码—Java实现_第5张图片


接口的调用说明都在这个页面里,需要按照这里的规则去调用这个API:

发送短信验证码和邮箱验证码—Java实现_第6张图片



  等短信模板申请下来后就可以使用这个API了,以下演示如何使用Java来调用这个API,制作一个简单的短信验证码登录:

首先是页面的index.jsp代码:

发送短信验证码和邮箱验证码—Java实现_第7张图片


用于调用短信接口的类:

发送短信验证码和邮箱验证码—Java实现_第8张图片


处理发送验证码请求的Servlet:

发送短信验证码和邮箱验证码—Java实现_第9张图片

发送短信验证码和邮箱验证码—Java实现_第10张图片


最后是处理登录业务的Servlet:

发送短信验证码和邮箱验证码—Java实现_第11张图片

发送短信验证码和邮箱验证码—Java实现_第12张图片

发送短信验证码和邮箱验证码—Java实现_第13张图片


运行结果:

发送短信验证码和邮箱验证码—Java实现_第14张图片


收到的验证码:

发送短信验证码和邮箱验证码—Java实现_第15张图片


输入验证码进行登录:

发送短信验证码和邮箱验证码—Java实现_第16张图片


控制台打印内容:

发送短信验证码和邮箱验证码—Java实现_第17张图片



邮箱验证码

  一般能使用邮箱注册的账户,在进行登录、注册或忘记密码等操作时,都能使用邮箱进行验证,所以邮箱验证码也使用得比较广泛,不过相对于短信验证码来说,邮箱验证码使用的少一些,因为现在是个人都有手机号码,但是不一定会有邮箱账号。

  使用邮箱来发送验证码,不需要像短信验证码那样调用短信服务API来发送验证码,但是需要有一个能够发送邮件的邮箱服务器或者使用第三方的邮箱,例如163、126、qq邮箱等。

  不管是邮箱服务器还是第三方的邮箱需要开启POP3、SMTP、IMAP服务,因为开启了这些服务后才能被第三方调用这个邮箱进行发送邮件。因为自己搭建邮箱服务器比较麻烦,所以我这里使用163的邮箱作为演示。


1. 首先得去邮箱里开启服务,登录后点击设置可以看到这些服务的选项:

发送短信验证码和邮箱验证码—Java实现_第18张图片


2. 设置服务,第一次设置的话,会需要短信验证,然后还会要求你设置一个密码:

发送短信验证码和邮箱验证码—Java实现_第19张图片

发送短信验证码和邮箱验证码—Java实现_第20张图片


3. 进行短信验证:

发送短信验证码和邮箱验证码—Java实现_第21张图片


4. 设置密码:

发送短信验证码和邮箱验证码—Java实现_第22张图片


5. 完成:

发送短信验证码和邮箱验证码—Java实现_第23张图片

这个设置的密码也就是授权码要记住,发送邮件的时候需要用到这个授权码。


  然后我们来使用Java编写一个发送邮件的类,但是写这个代码之前你得先获得下图中的jar包,需要使用这些第三方的jar包来实现邮件的发送:

发送短信验证码和邮箱验证码—Java实现_第24张图片


获得jar包后,把这些jar包都导入到web工程下的lib目录中:

发送短信验证码和邮箱验证码—Java实现_第25张图片


  有了这些jar包后,就可以开始编写代码了,我们先写一个简单的类来测试一下能否成功发送邮件,代码示例:

发送短信验证码和邮箱验证码—Java实现_第26张图片


运行结果:

发送短信验证码和邮箱验证码—Java实现_第27张图片

如图,邮件可以正常的发送,并且收件人也能收到。



关于邮件的验证码的问题:

有时候邮件会发送的比较慢,甚至会发送不出去。所以用户在这种情况下就需要进行等待,最经典的就是那个圆圈的图标会一直在转圈,为了解决这种等待的问题,可以将验证码的发送请求存放到一个队列集合中,让它在后台进行发送,这样的话用户发送验证码时就不至于卡在当前页面里,示意图:

发送短信验证码和邮箱验证码—Java实现_第28张图片