在Web项目中手机短信验证码实现的全过程记录

 更新时间:2017年12月07日 15:54:37   作者:james  
这篇文章主要给大家介绍了关于在Web项目中实现短信验证码的全过程记录,文中通过示例代码介绍的非常详细,在文末跟大家提供了源码下载,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

前言

最近在做远程智能水表管理系统这个过程有一个功能是在注册页面可以使用手机注册,找了许久才大致了解了手机验证码实现流程,今天在此和大家分享一下。下面话不多说了,来一起看看详细的介绍吧。

短信验证码实现流程

      1、构造手机验证码:使用random对象生成要求的随机数作为验证码,例如4位验证码:1000~9999之间随机数;

      2、使用接口向短信平台发送手机号和验证码数据,然后短信平台再把验证码发送到制定手机号上,接口参数一般包括:目标手机号,随机验证码(或包含失效时间),平台接口地址,平台口令;

      3、保存接口返回的信息(一般为json文本数据,然后需转换为json对象格式);

      4、将手机号--验证码、操作时间存入Session中,作为后面验证使用;

      5、接收用户填写的验证码及其他数据;

      6、对比提交的验证码与Session中的验证码是否一致,同时判断提交动作是否在有效期内;

      7、验证码正确且在有效期内,请求通过,处理相应的业务。

今天我们就前4步进行实现:

为了简化流程,我们在就使用固定手机验证码而不采用随机产生的数作为验证码

在此我们有一个前端页面一个后台逻辑处理页面,下面就该两项进行简单说明:

前端页面

<body>
 <h1>
  <%
  Send send = new Send();
  String PostData = "account=JamesXT&password=18770918982lkx&mobile=18770918982&content="+java.net.URLEncoder.encode("您的订单编码:4557。如需帮助请联系客服。","utf-8");
  //out.println(PostData);
  String ret = Send.SMS(PostData, "http://sms.106jiekou.com/utf8/sms.aspx");
  out.println(ret);
  //请自己反序列化返回的字符串并实现自己的逻辑
 %>
 </h1>
 </body>

PostData:就是想短信服务平台提交的待处理的数据,它一般包括短信服务平台注册者的用户账号名,密码,以及你想向谁发送短信验证码以及短信验证码所属信息的完整内容。

String ret = Send.SMS(PostData, http://sms.106jiekou.com/utf8/sms.aspx);

这个是将数据和短信服务平台的网址进行绑定,即该提交数据交付哪个平台进行处理。

后台逻辑处理类:

public class Send {
 //SMS方法中有两个参数,这个参数是由前台页面提交的PostData和前者绑定的短信服务地址确定的
 public static String SMS(String postData, String postUrl) {
 try {
  //发送POST请求
  URL url = new URL(postUrl);
  HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  conn.setRequestMethod("POST");
  conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  conn.setRequestProperty("Connection", "Keep-Alive");
  conn.setUseCaches(false);
  conn.setDoOutput(true);
  conn.setRequestProperty("Content-Length", "" + postData.length());
  OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  //将前台提交的数据放入输出流中,即向短信服务平台发送该条业务请求
  out.write(postData);
  out.flush();
  out.close();

  //获取响应状态码
  if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
  System.out.println("connect failed!");
  return "";
  }
  //获取响应内容
  String line, result = "";
  BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
  while ((line = in.readLine()) != null) {
  result += line + "\n";
  }
  in.close();
  return result;
 } catch (IOException e) {
  e.printStackTrace(System.out);
 }
 return "";
 }
}

最后附上Demo源码地址:http://xiazai.jb51.net/201712/yuanma/MobileRegist(jb51.net).rar

本demo所用短信服务商地址为:http://www.106jiekou.com/login/?ReturnUrl=/member/trigger/templates/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • sa-token 路由拦截式鉴权使用示例详解

    sa-token 路由拦截式鉴权使用示例详解

    这篇文章主要为大家介绍了sa-token 路由拦截式鉴权使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • SpringBoot中注解实现定时任务的两种方式

    SpringBoot中注解实现定时任务的两种方式

    这篇文章主要介绍了SpringBoot中注解实现定时任务的两种方式,SpringBoot 定时任务是一种在SpringBoot应用中自动执行任务的机制,通过使用Spring框架提供的@Scheduled注解,我们可以轻松地创建定时任务,需要的朋友可以参考下
    2023-10-10
  • Java如何获取Json中的数据实例代码

    Java如何获取Json中的数据实例代码

    这篇文章主要给大家介绍了关于Java如何获取Json中数据的相关资料,我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON获取方式,需要的朋友可以参考下
    2023-09-09
  • springboot2.1.7整合thymeleaf代码实例

    springboot2.1.7整合thymeleaf代码实例

    这篇文章主要介绍了springboot2.1.7整合thymeleaf代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • java将XML文档转换成json格式数据的示例

    java将XML文档转换成json格式数据的示例

    本篇文章主要介绍了java将XML文档转换成json格式数据的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Mybatis Plus 字段为空值时执行更新方法未更新解决方案

    Mybatis Plus 字段为空值时执行更新方法未更新解决方案

    这篇文章主要介绍了Mybatis Plus 字段为空值时执行更新方法未更新解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java中常见的并发控制手段浅析

    Java中常见的并发控制手段浅析

    所谓并发控制就是帮助我们程序员更容易的让线程之间合作,让线程之间相互配合来满足业务逻辑,这篇文章主要给大家介绍了关于Java中常见的并发控制手段的相关资料,需要的朋友可以参考下
    2021-08-08
  • Intellij IDEA 中调试 maven 插件的步骤

    Intellij IDEA 中调试 maven 插件的步骤

    这篇文章主要介绍了Intellij IDEA 中调试 maven 插件,本文分步骤给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Java获取客户端真实IP地址过程解析

    Java获取客户端真实IP地址过程解析

    这篇文章主要介绍了Java获取客户端真实IP地址过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • java实现动态代理示例分享

    java实现动态代理示例分享

    动态代理作为代理模式的一种扩展形式,广泛应用于框架(尤其是基于AOP的框架)的设计与开发,本文将通过实例来讲解Java动态代理的实现过程。
    2014-03-03

最新评论