在做远程智能水表管理系统这个过程有一个功能是在注册页面可以使用手机注册,找了许久才大致了解了手机验证码实现流程,今天在此和大家分享一下。

短信验证码实现流程

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

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

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

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

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

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

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

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

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

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

前端页面

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);

//请自己反序列化返回的字符串并实现自己的逻辑

%>

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 "";

}

}

java web项目登录短信验证码_如何在Web项目完成短信验证码相关推荐

  1. web项目登录界面小结

    目录 一.项目流程图 二.详细步骤 1.创建一个web项目 2.搭建响应式web项目界面 一.项目流程图 二.详细步骤 1.创建一个web项目 如图: 2.搭建响应式web项目界面 (1)下载网络上的 ...

  2. java代码进行短信接收_自动化测试-自动获取手机短信验证码

    最近在做生产环境自动化测试,碰到一个难题就是短信验证码的获取,生产环境短信验证码是真实的,不能采用测试环境将短信验证码写成固定的方法解决,我的思路是:做一个apk小程序,将手机上的短信验证码实时读取出 ...

  3. java web项目 相对路径怎么写_理解JavaWeb项目中的路径问题——相对路径与绝对路径...

    背景:html 在刚开始学习javaweb,使用servlet和jsp开发web项目的过程当中,一直有一个问题困扰着我:servlet 和 jsp 之间相互跳转,跳转的路径应该如何书写,才能正确的访问 ...

  4. web项目打包到上线教程_手把手教你在 IntelliJ IDEA 中部署 Web 项目

    关注 逆锋起笔 学习 资源.工具不用愁 「逆锋起笔」公号读者福利 ☞ 程序员进阶必备资源免费送「21种技术方向!」 ☜本文地址:www.cnblogs.com/deng-cc/p/6416332.ht ...

  5. web.xml文件位于web项目的目录结构中的_看完这篇,别人的开源项目结构应该能看懂了...

    我为什么要写这篇 近来,和不少初学Spring或Spring Boot的小伙伴私信交流了关于项目目录结构划分和代码分层的问题. 很多小伙伴表示网上下载下来的开源项目看不懂,项目结构和代码分层看得很蒙, ...

  6. java中项目启动时加载_如何在项目启动时,加载或解析某配置文件

    在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...

  7. freemarker中运算符_如何在Web应用系统表示层开发中应用Velocity模板技术

    软件项目实训及课程设计指导--如何在Web应用系统表示层开发实现中应用Velocity模板技术 1.分离Web表示层的数据处理和展现逻辑的常见的应用技术 分离Web表示层的数据处理和展现逻辑是目前企业 ...

  8. web原型图设计软件软件_如何在2020年选择最佳的Web设计软件(比较)

    web原型图设计软件软件 Are you looking for the best web design software to make beautiful websites? Most exper ...

  9. eclipse怎么创建web项目html,eclipse入门之创建第一个web程序(jsp测试环境)

    1.首先我们打开eclipse 2.下面我们去eclipse配置tomcat a) 菜单栏选择window--preferences b) 在向导视图中找到Server c) 在Server点击箭头, ...

最新文章

  1. linux下kafka常用命令
  2. 返回,返回无,根本没有返回?
  3. 建设网站套用模板优化难吗?
  4. PostgreSQL 与 MySQL 相比,优势何在?[转]
  5. 把 Redis 当作队列来用,真的合适吗?
  6. 【springboot】禁用特定AutoConfiguration/自动配置类
  7. 字符串的获取相关方法
  8. mysql5.1win7_免安装版mysql5.1.57在win7下成功配置
  9. android canvas自适应屏幕,html5 Canvas 如何自适应屏幕大小?
  10. android适配性报告,关于Android的多种屏幕适配
  11. OpenShift 4 - 用自定义的TLS证书对访问OpenShift的用户认证身份
  12. HDFS 上传文件的不平衡,Balancer问题是过慢
  13. 【平面设计基础】01:抠图—薄、透、露的朦胧美
  14. 部分js文件在360浏览器极速模式下不加载,不执行的原因
  15. 洛谷P1179 [NOIP2010 普及组] 数字统计题解
  16. python中扑克牌类设计_创建扑克牌类Python
  17. 2019中国科学院、中国工程院院士增选名单正式发布
  18. linux无线鼠标右键自动选择,2020年高性价比无线鼠标推荐
  19. Linux-smb服务器搭建
  20. 解决 chrome 37 之后 flash 版本过低问题

热门文章

  1. element正整数校验
  2. oracle 启动错误1067,oracle监听器启动1067错误处理
  3. 1044. Lucky Tickets. Easy!
  4. unity协程coroutine 简明教程
  5. 数据结构与算法综合课程设计——校园导航系统
  6. mysql中dual表
  7. 公用网络怎么找不到计算机,Windows10网络里面看不到NAS或其它电脑怎么办?
  8. 区别:强化学习集成学习增强学习规则学习
  9. 成为机器人工程师需要学习那些技术
  10. 与程序猿谈恋爱后,我不得不做心机婊