用户登录到页面 - 输入手机号- 点击获取验证码按钮-后台生成6位随机数 - 通过第三方平台发送到手机 - 并把随机验证码放到session - 用户输入验证码 - 后台匹配手机号与验证码 - 120秒后自动清空session中的验证码(用java定时器)

前台没必要展示了.

controller:

@RequestMapping(value="/provePhone",method=RequestMethod.POST)public Object provePhone(Model model,String phone,HttpSession session) throws HttpException, IOException{String msg="手机号码格式错误!";if(phone.length()!=11){model.addAttribute("msg", msg);model.addAttribute("phone", phone);return "login";}else{//发送随机6位验证码到手机int phoneCode=SendPhoneCode.phoneCodeStart(phone);//放入sessionsession.setAttribute("phone", phone);session.setAttribute("phoneCode", String.valueOf(phoneCode));//120秒后清除session中的验证码SendPhoneCode.removeSessionPhoneCode(session);msg="发送成功!请填写验证码!";model.addAttribute("phong", phone);model.addAttribute("msg", msg);}return "login";}

发送短信随机数和定时器写一个类里了.懒得分开了

public class SendPhoneCode {public static int  phoneCodeStart(String phone) throws HttpException, IOException {Random r=new Random();int i=r.nextInt(899999);int a=i+100000;String phoneCode="验证码:"+String.valueOf(a)+  "验证码120秒有效";HttpClient client = new HttpClient();PostMethod post = new PostMethod("http://gbk.api.smschinese.cn");post.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=gbk");// 在头文件中设置转码NameValuePair[] data = { new NameValuePair("Uid", "bikepark"), new NameValuePair("Key", "xxxxxxxxxxxxxxxxxxx"),new NameValuePair("smsMob", phone), new NameValuePair("smsText", phoneCode) };post.setRequestBody(data);client.executeMethod(post);Header[] headers = post.getResponseHeaders();int statusCode = post.getStatusCode();System.out.println("statusCode:" + statusCode);for (Header h : headers) {System.out.println(h.toString());}String result = new String(post.getResponseBodyAsString().getBytes("gbk"));System.out.println(result); // 打印返回消息状态post.releaseConnection();return a;}/*** 定时器 120秒后清除session中的验证码* @param session*/public static void removeSessionPhoneCode(HttpSession session){Timer timer = new Timer();timer.schedule(new TimerTask() {public void run() {session.removeAttribute("phoneCode");}}, 120000);// 设定指定的时间time,1秒为1000毫秒}}

再对手机验证码验证是否匹配

@RequestMapping("/phoneCode")public Object phoneCode(HttpSession session,String phone,String phoneCode,Model model){String msg="";if(session.getAttribute("phone").equals(phone)&&session.getAttribute("phoneCode").equals(phoneCode)){msg="验证通过!";model.addAttribute("phone", phone);model.addAttribute("msg",msg );return "login";}else{msg="验证未通过!";model.addAttribute("phone", phone);model.addAttribute("msg",msg );return "login";}}   

注意:两次请求的方式必须都是"POST",否则第二次验证的请求会创建一个新session就匹配不到之前的随机数了.

对了,第三方短信平台用的"中国网建".

手机短信验证码一次性 需要第三方平台相关推荐

  1. 手机短信验证码注册-短信平台验证码开发6

    经过前面的基础准备工作后, 就可以正式进入开发的阶段了, 我们的短信接口开发, 主要以实现手机短信验证码功能案例, 进行演示, 因为这个功能在实际项目中用得最多. 这一节课程, 我们先把手机短信验证码 ...

  2. Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用...

    近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限, ...

  3. Java调用WebService接口实现发送手机短信验证码功能

    为什么80%的码农都做不了架构师?>>>    一.样式示例: 二.前台的注册页面的代码:reg.jsp <%@ page language="java" ...

  4. 手机短信验证码收不到怎么办?原因和解决方案全都在这里

    对于手机短信验证码我们并不陌生,注册软件.网站验证,APP登录等都有可能遇到,大部分的时候手机短信验证码接收是非常及时的,平台窗口输入手机号,点击发送验证码,几秒钟我们的手机上就会收到短信,但最近常常 ...

  5. Flask项目实战——6—(前台用户模型、前台登录注册、图形验证码、手机短信验证码、添加表单验证短信验证码请求)

    1.前台用户模型 前台用户模型定义 创建前台模型文件 apps/front/models.py # -*- encoding: utf-8 -*- """ @File : ...

  6. java调接口实现发送手机短信验证码功能,手机验证码,接口调用

    原文地址:  http://blog.csdn.net/sxdtzhaoxinguo/article/details/34437591 近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用 ...

  7. 如何实现下发手机短信验证码

    如何实现下发手机短信验证码 我们都遇到过这种情况,某个账号长时间没登录某天想要登录的时候,却发现密码早已忘记,这时候想要找回密码很可能就用到了手机短信验证的功能,在有些网站注册账号的时候往往也需要手机 ...

  8. 手机短信验证码真的安全吗?

    手机的蓬勃发展,衍生出来众多行业,也让原本功能单一的手机号做出极大的改变.如今似乎每个人的手机号都绑定了或多或少的各种账号,手机绑定的东西越来越多,涉及到的重要的东西也越来越多,例如像银行卡绑定手机号 ...

  9. QPW 手机短信验证码发送日志表(tf_sms_send_log)

    文章目录 手机短信验证码发送日志表 需求说明 手机短信验证码发送日志表 CREATE TABLE `tf_sms_send_log` (`send_id` bigint(11) NOT NULL AU ...

最新文章

  1. Java Web 中的一些问题
  2. 装服务器的时候卡在复制文件,子域无法安装,卡在复制架构目录分区
  3. 如此架构,泛滥架构,疯狂架构
  4. Python之简单验证码实现
  5. pdh光端机相关知识介绍
  6. struts2 国际化
  7. itchat 保存好友信息以及生成好友头像图片墙
  8. php将文件转换为utf-8,PHP-将邮件正文转换为UTF-8
  9. @程序员,不会 Debug 还做什么开发?
  10. 张一鸣、王欣和罗永浩的社交梦
  11. CCIE学习(40)—— OSPF设计与LSA类型(三)
  12. matlab学习--语言基础
  13. shapefile(.shp)空间数据格式详细说明
  14. CPU缓存侧信道攻击综述-Survey of CPU Cache-Based Side-Channel Attacks
  15. 计算机函数求销售额公式,利用excel函数公式中的LARGE函数和SUM函数提取前五名的销售额...
  16. 计算机网络管理员下午试题答案,(完整版)计算机网络管理员考试试题库和答案(13页)-原创力文档...
  17. 萧风查询搜索软件 v1.1 下载
  18. 【JAVA】关于自动化测试所需要学习的java基础知识笔记
  19. 自动打call机 qq伪自动发消息
  20. ChatGPT保姆级教程,一分钟学会使用ChatGPT!

热门文章

  1. 会议OA之我的会议(排座送审)
  2. speedoffice被隐藏的工作表如何取消隐藏
  3. shell win10 改成cmd_Win10小技巧:如何将在此处打开命令改为CMD或Powershell?
  4. 【python】算术运算报错can‘t multiply sequence by non-int of type ‘float‘
  5. 有道云笔记 markdown html,你不可不知的有道云笔记Markdown指南【进阶版】
  6. 有一个已经排好序的数组,输入一个数,将其插入到数组中,使得数组还是有序的。要求数组元素的值来自初始化
  7. 【协程】MyCoroutine轻量级协程框架代码详细剖解
  8. 【Python魔术方法】py复习
  9. 中文转自定义英文存储
  10. 【洛谷P3932】浮游大陆的68号岛【前缀和】