Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java实现短信验证码登陆 demo

java实现短信验证码登陆 demo

作者头像
故久
发布于 2019-09-29 06:57:05
发布于 2019-09-29 06:57:05
5.6K0
举报
文章被收录于专栏:故久故久

java + servlet+ jsp实现发送手机短信验证码

【1】选择平台,完成认证。

短信登陆平台很多,自己可以看个人爱好选择。

我们使用的API平台是:秒嘀云: https://sms.miaodiyun.com/login.html

注册该平台,完成认证就可以获取到参数:ACCOUNT SID , AUTH TOKEN , API

【2】创建短信模板 (该模板必须创建,通过平台审核只会才可以使用,而且后续的参数 smsContent 要和模板中的一致 )

【3】发送短信接口

http://www.miaodiyun.com/doc/https_sms.html

编写java手机短信发送代码

【4】项目目录结构 (idea 中创建的普通web工程)

【5】Config.java

public class Config { /** * url前半部分 */ public static final String BASE_URL = " https://openapi.miaodiyun.com/distr*******dSMS";

/** * 开发者注册后系统自动生成的账号,可在官网登录后查看 */ public static final String ACCOUNT_SID = "fcf340ac***********915927";

/** * 开发者注册后系统自动生成的TOKEN,可在官网登录后查看 */ public static final String AUTH_TOKEN = "648384a1***********2c33e4f";

/** * 响应数据类型, JSONXML */ public static final String RESP_DATA_TYPE = "JSON"; }

【6】http请求工具HttpUtil.java

package com.miaodi.comment;

import org.apache.commons.codec.digest.DigestUtils;

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection;

/** * http请求工具 */ public class HttpUtil { /** * 构造通用参数timestamp、sig和respDataType * * @return */ public static String createCommonParam(String sid,String token) { // 时间戳 long timestamp = System.currentTimeMillis(); // 签名 String sig = DigestUtils.md5Hex(sid + token + timestamp); return "&timestamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE; }

/** * post请求 * * @param url * 功能和操作 * @param body * 要post的数据 * @return * @throws IOException */ public static String post(String url, String body) { System.out.println("body:" + System.lineSeparator() + body);

String result = ""; try { OutputStreamWriter out = null; BufferedReader in = null; URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection();

// 设置连接参数 conn.setDoOutput(true); conn.setDoInput(true); conn.setConnectTimeout(5000); conn.setReadTimeout(20000); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 提交数据 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); out.write(body); out.flush();

// 读取返回数据 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line = ""; boolean firstLine = true; // 读第一行不加换行符 while ((line = in.readLine()) != null) { if (firstLine) { firstLine = false; } else { result += System.lineSeparator(); } result += line; }

} catch (Exception e) { e.printStackTrace(); } return result; }

/** * 回调测试工具方法 * * @param url * @return */ public static String postHuiDiao(String url, String body) { String result = ""; try { OutputStreamWriter out = null; BufferedReader in = null; URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection();

// 设置连接参数 conn.setDoOutput(true); conn.setDoInput(true); conn.setConnectTimeout(5000); conn.setReadTimeout(20000);

// 提交数据 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); out.write(body); out.flush();

// 读取返回数据 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line = ""; boolean firstLine = true; // 读第一行不加换行符 while ((line = in.readLine()) != null) { if (firstLine) { firstLine = false; } else { result += System.lineSeparator(); } result += line; } } catch (Exception e) { e.printStackTrace(); } return result; } }

【7】获取验证码类 GetMessageCode.java

package com.miaodi.getcode;

import com.alibaba.fastjson.JSONObject; import com.miaodi.comment.Config; import com.miaodi.comment.HttpUtil;

import java.net.URLEncoder;

public class GetMessageCode {

private static String accountSid = Config.ACCOUNT_SID; private static String rod=smsCode(); //生成一个随机验证码 private static String smsContent = "【南京车纷享汽车服务有限公司】登录验证码:"+rod +",如非本人操作,请忽略此短信";

//创建验证码 public static String smsCode(){ String random=(int)((Math.random()*9+1)*100000)+""; return random; }

//根据相应的手机号发送验证码 public static String getCode(String phone){ String tmpSmsContent = null; try{ tmpSmsContent = URLEncoder.encode(smsContent, "UTF-8"); }catch(Exception e){ e.getMessage(); }

String url = Config.BASE_URL; String body = "accountSid=" + accountSid + "&to=" + phone + "&smsContent=" + tmpSmsContent + HttpUtil.createCommonParam(Config.ACCOUNT_SID,Config.AUTH_TOKEN);

// 提交请求 String result = HttpUtil.post(url, body);

//字符串转json对象 JSONObject jsonObject = JSONObject.parseObject(result); String respCode = jsonObject.getString("respCode");

System.out.println("验证码:"+rod); System.out.println("结果码:"+respCode);

//反馈-00000状态码标识请求成功, String defaultRespCode="0000"; if(defaultRespCode.equals(respCode)){ return rod; }else{ return defaultRespCode; } }

}

【8】servlet类 LoginServlet.java

package com.tencent.loginservlet;

import com.miaodi.getcode.GetMessageCode;

import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;

@WebServlet(name = "LoginServlet",urlPatterns = "/sendSMS") public class LoginServlet extends HttpServlet {

/** serialVersionUID*/ private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String phone=request.getParameter("phone"); //根据获取到的手机号发送验证码 String code = GetMessageCode.getCode(phone); System.out.println("返回code"+code); response.getWriter().print(code);

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); }

}

【9】login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <base href="<%=basePath%>"> <title>测试短信登陆</title> </head> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0">

<link rel="stylesheet" href="CSS/bootstrap/bootstrap.min.css" /> <script type="text/javascript" src="js/jQuery/jquery-3.4.1.js"></script> <style type="text/css"> #login { width: 450px; height: 100px; margin: 126px auto; }

#btn { margin-left: 100px; margin-top: -25px; width: 120px; height: 25px; font-size: 11px; }

body { background-color: #ecfcf9; } </style> </head> <script type="text/javascript"> var InterValObj; //timer变量,控制时间 var count = 60; //间隔函数,1秒执行 var curCount;//当前剩余秒数

function sendMessage() { curCount = count; $("#btn").attr("disabled", "true"); $("#btn").val(curCount + "秒后可重新发送"); InterValObj = window.setInterval(SetRemainTime, 1000); //启动计时器,1秒执行一次请求后台发送验证码 TODO } //timer处理函数 function SetRemainTime() { if (curCount == 0) { window.clearInterval(InterValObj);//停止计时器 $("#btn").removeAttr("disabled");//启用按钮 $("#btn").val("重新发送验证码"); } else { curCount--; $("#btn").val(curCount + "秒后可重新发送"); } } </script>

<body> <div class="container"> <div id="login"> <fieldset> <div id="legend" class=""> <legend class="">用户登录</legend> </div> <form class="form-horizontal" role="form">

<div class="form-group"> <label class="col-sm-2 control-label">手机号</label> <div class="col-sm-5"> <input type="text" class="form-control" id="phone" name="phone" placeholder="请输入您的手机号" required> </div> </div>

<div class="form-group"> <label class="col-sm-2 control-label">验证码</label> <div class="col-sm-3"> <input type="code" class="form-control" id="code" name="code" placeholder="验证码" required> <input class="btn btn-default" id="btn" name="btn" value="发送验证码" /> </div> </div>

<div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="button" class="btn btn-success" id="lo">手机号登录</button> </div> </div>

</form> </fieldset> </div> </div> </body>

<script type="text/javascript"> var sms = ""; $("#btn").click(function() { var phone = $("#phone").val(); if (phone != "") { sendMessage(); $.ajax({ url : "sendSMS", //发送请求 type : "post", data : { "phone" : phone }, success : function(result) { sms = result; } }); } else { alert("请输入手机号"); return false; } }); $("#lo").click(function() { var code = $("#code").val(); if (code == "") { alert("请输入验证码"); } else { if (sms == code) { window.kk = "success.jsp"; } else { alert("验证码错误"); } ; } ; }); </script>

</html>

【10】备注:

lib是一些jar包,jar可以从秒嘀云平台的demo中导入到自己的工程中,也可以自己从网上下载,主要用到的是commons-codec-1.9.jar 做加密用的,fastjson-1.2.49.jar 是作json转化用的,其他的没啥用。

页面中引入的bootstrap 和jQuery 库 自己可以从网上下载。succee.jsp 等可以自定义。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
基于jsp和基于web的区别_java发送短信
最近几天有人需要帮忙做一个关于发送验证码的功能,之前没有做过,于是我鼓捣一阵子,记录一下关于web项目中注册登录常用的手机验证码和邮箱验证码的发送。
全栈程序员站长
2022/11/04
4.2K0
基于jsp和基于web的区别_java发送短信
搞一个短信验证码登录,难吗?
1、构造手机验证码:使用random对象生成要求的随机数作为验证码,例如4位验证码:1000~9999之间随机数;
良月柒
2021/01/07
1K0
搞一个短信验证码登录,难吗?
java实现手机短信验证全过程
手机短信验证现在在各种系统可以说都是用的非常普遍的,这个可能是方便和安全性的考虑,所以才广泛的使用,这篇文章就以一个短信接口的实例,来讲解一下怎么使用短信接口。
好好学java
2018/06/16
3.8K0
java实现手机短信验证全过程
java实现发送手机验证码功能
1. 进入秒嘀科技(http://www.miaodiyun.com/),注册一个账号
全栈程序员站长
2022/09/13
4.2K0
java实现发送手机验证码功能
使用java在项目完成手机短信登录
手机号登录在现在的项目中用的场景非常多,实现起来也不难,今天我们就一起来通过演示实现登录过程。
全栈程序员站长
2022/08/01
2.2K0
使用java在项目完成手机短信登录
springboot整合redis发送手机验证码注册登录
短信验证码是通过发送验证码到手机的一种有效的验证码系统。主要用于验证用户手机的合法性及敏感操作的身份验证。常见的使用场景有:登录注册、信息修改、异常登录、找回密码等操作。 用户注册发送验证码,然后核实对比用户注册成功采用redis方式将手机号码+key放入redis缓存中设置验证码超时时间,比对用户名和验证码采用数据库存储方式,注册时拿取redis中验证码进行判读验证码是否过期是否匹配。
崔笑颜
2020/06/08
7.5K0
用JAVA实现Email和短信验证
在Web项目中Email和短信验证是很普遍的情形,下面我们来介绍如何用Java来实现。
顾翔
2021/07/22
2.4K0
简单几步,用云开发搞定短信验证码登录
短信验证码登录支持在客户端使用短信验证码进行登录,封装了短信验证码的生成、发送、校验和定时清理逻辑,帮助开发者进行鉴权。登录成功后,用户身份将转化为正式用户。
腾讯云开发TCB
2020/09/08
2.1K0
短信验证码登录
3.进入leancloud官网https://leancloud.cn/ a.点击右上角控制台
PHP开发工程师
2021/04/19
14.2K0
短信验证码登录
vue实现短信验证码登录
无论是移动端还是pc端登录或者注册界面都会见到手机验证码登录这个功能,输入手机号,得到验证码,最后先服务器发送请求,保存登录的信息,一个必不可少的功能
小周sir
2019/09/23
16.7K1
vue实现短信验证码登录
JAVA实现利用第三方平台发送短信验证码
前段时间自己做的一个小项目中,涉及到用短信验证码登录、注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来。
用户7353950
2022/06/23
6.2K0
JAVA实现利用第三方平台发送短信验证码
防短信验证码轰炸怎么防_接口幂等性解决方案
新昕科技在交易反欺诈核心上, 通过AI快速学习机制,结合国际领先的设备指纹技术,首次推出无需图形验证码机制的企业短信防火墙,三步完成下载对接。
全栈程序员站长
2022/11/07
3.4K0
基于 Session 短信验证码登录
基于 Session 短信验证码登录获取验证码正则工具类package com.hmdp.utils;public abstract class RegexPatterns { /** * 手机号正则 */ public static final String PHONE_REGEX = "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$"; /** * 邮箱正则 */ publi
ruochen
2022/08/05
7.4K0
android短信验证码方案,Android之短信验证码
3.配置AndroidManifest.xml文件,在Application节点中加入以下代码:
全栈程序员站长
2022/09/15
11.5K0
android短信验证码方案,Android之短信验证码
【玩转腾讯云】django 开发Bug追踪平台之用户注册篇(基于腾讯云短信 & redis)
项目预览 👉 Bug追踪平台【云短信买不起了,可通过 手机号:18203503747 密码:ruochen666 登入体验】 项目gitee地址 👉 saas 本篇教程对应代码为 【注册验证码处理】提交,可通过对应分支查看 用户注册篇 首先,总体的<font color="red">思维导图</font>如下: [watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI5MzM5NDY3,siz
ruochen
2021/04/11
27.5K0
【玩转腾讯云】django 开发Bug追踪平台之用户注册篇(基于腾讯云短信 & redis)
注册页面表单js验证,手机验证码验证,阻断提交表单的可行性方案(移植性极强)
1、html表单部分如下,样式使用的是AdminLTE前端框架,可以不理会。简要说明一下:
jiankang666
2022/05/12
3.8K0
注册页面表单js验证,手机验证码验证,阻断提交表单的可行性方案(移植性极强)
一次短信验证码整改实验
这个短信验证码在并发量非常大的情况下有可能会失效,后续会进行整改升级,保证线程安全
阿东
2021/08/16
1.1K0
短信验证码登录你会吗?
今日主题:短信验证码登录 简介 相信大家在很多网站进行登录的时候,都见过短信验证码登录吧,那现在就来看看怎么实现吧 原理说明 首先我们需要一个短信发送接口,前端发送手机号码到后端,后端随机生成一个验证
java后端指南
2021/05/13
1.7K0
短信验证码登录你会吗?
使用云函数构建短信验证码服务的案例
通过手机短信发送验证码,是最普遍、最安全验证用户真实身份的方式。目前,短信验证码广泛应用于用户注册、密码找回、登录保护、身份认证、随机密码、交易确认等应用场景。
haimingli
2020/12/29
4K0
腾讯云短信 nodejs 接入, 通过验证码修改手机示例
腾讯云短信 nodejs 接入, 通过验证码修改手机示例 参考: 腾讯云短信文档 国内短信快速入门 qcloudsms Node.js SDK 文档中心>短信>错误码 nodejs sdk 使用示例 const QcloudSms = require('qcloudsms_js'); const cfg = { appid: 1400123123, // SDK AppID 以1400开头 appkey: '...', // 短信应用 SDK AppKey templateId: 40279
用户1659066
2019/08/23
12.8K2
相关推荐
基于jsp和基于web的区别_java发送短信
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档