java 实现发送短信验证码(网易云)
链接:https://pan.baidu.com/s/1saRmzciNQWpFxHJRN0ISTg 密码:siyt
实现发送验证码的工程下载
1、我们打开这个工程,查看其中的代码
package com.ghj.test;import java.io.IOException;
import java.util.Scanner;import com.ghj.tool.SMSUtils;/*** 测试验证码类短信*/
public class CaptchaMsgTest {private static String mobile = "xxxxxxxxxxxx";/*** 短信内容:您的验证码为%s,10分钟内有效。*/@SuppressWarnings("resource")public static void main(String[] args) {if(SMSUtils.isMobile(mobile)){try {SMSUtils.sendCode(mobile,"3943633");//发送验证码} catch (IOException e) {e.printStackTrace();}}System.out.print("请输入您收到的短信验证码:");String code = new Scanner(System.in).next();try {if(SMSUtils.verifyCode(mobile, code)){//校验验证码System.out.println("验证码正确...");}else{System.out.println("验证码错误...");}} catch (IOException e) {e.printStackTrace();}}
}
mobile属性可以改为你想要发送到的手机号码 sendCode方法中的第二个参数为验证码模板id 其中调用了smsutil中的sendcode方法来向手机发送验证码
package com.ghj.tool;import com.alibaba.fastjson.JSON;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** 短信相关的工具类*/
public class SMSUtils {private static final String NONCE = "123456";private static final String APP_SECRET = "87ae5a14b7e3";private static final String APP_KEY = "c5e7dd7648b871180f53063cf1d3f869";/*** 检测手机号有效性* * @param mobile 手机号码* @return 是否有效*/public static final boolean isMobile(String mobile){Pattern pattern = Pattern.compile("^((1[3578][0-9])|(14[57]))\\d{8}$");Matcher matcher = pattern.matcher(mobile);return matcher.matches();}/*** 验证码类短信,注意:该短信中验证码不能自己生成,由网易云帮我们生成* * @param mobile 手机号码* @param templateId 验证码模板ID* @return 是否发送成功*/public static final boolean sendCode(String mobile, String templateId) throws IOException {HttpPost httpPost = new HttpPost("https://api.netease.im/sms/sendcode.action");String currentTime = String.valueOf(new Date().getTime()/1000L);String checkSum = CheckSumBuilder.getCheckSum(APP_SECRET,NONCE,currentTime);//set headerhttpPost.setHeader("AppKey",APP_KEY);httpPost.setHeader("CurTime",currentTime);httpPost.setHeader("Nonce",NONCE);httpPost.setHeader("CheckSum",checkSum);httpPost.setHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");//set dataList<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();nameValuePairList.add(new BasicNameValuePair("mobile",mobile));nameValuePairList.add(new BasicNameValuePair("templateid", templateId));httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList,"utf-8"));//start requestCloseableHttpClient closeableHttpClient = HttpClients.createDefault();HttpResponse httpResponse = closeableHttpClient.execute(httpPost);String responseResult = EntityUtils.toString(httpResponse.getEntity(),"utf-8");System.out.println("responseResult:"+responseResult);String stateCode = JSON.parseObject(responseResult).getString("code");if(stateCode.equals("200")){return true;}return false;}/*** 判断用户输入验证码与网易云生成的验证码是否一致* * @param mobile 电话号码* @param code 发送到mobile上的短信*/public static final boolean verifyCode(String mobile, String code) throws IOException {HttpPost httpPost = new HttpPost("https://api.netease.im/sms/verifycode.action");String currentTime = String.valueOf(new Date().getTime()/1000L);String checkSum = CheckSumBuilder.getCheckSum(APP_SECRET,NONCE,currentTime);//set headerhttpPost.setHeader("AppKey",APP_KEY);httpPost.setHeader("CurTime",currentTime);httpPost.setHeader("Nonce",NONCE);httpPost.setHeader("CheckSum",checkSum);httpPost.setHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");//set dataList<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();nameValuePairList.add(new BasicNameValuePair("code",code));nameValuePairList.add(new BasicNameValuePair("mobile",mobile));httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList,"utf-8"));//start requestCloseableHttpClient closeableHttpClient = HttpClients.createDefault();HttpResponse httpResponse = closeableHttpClient.execute(httpPost);String responseResult = EntityUtils.toString(httpResponse.getEntity(),"utf-8");System.out.println("responseResult:"+responseResult);String stateCode = JSON.parseObject(responseResult).getString("code");if(stateCode.equals("200")){return true;}return false;}}
因为我们是通过网易的第三方验证码服务来实现,所以其中app_key和app_secret两个属性的值需要网易云提供
http://netease.im/sms 我们登陆这个网站 注册账户并登陆
创建应用,创建完成后,在下面未开通的服务中找到短信并申请免费试用,在最上方找到appkey管理,点进去后就有app key和app secret,将这两个值复制到smsutil类中的属性,点击短信管理模板跳转后在点击验证码模板可以自定义短信格式,每个验证码模板都有对应的id,选择一个复制到第一个程序sendCode方法的第二个参数中。
此时运行上面的第一个程序,手机就能收到验证码了。
2、下面我们通过验证码来实现网页登陆功能
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>用户登陆</title><script type="text/javascript" src="./js/jquery-3.3.1.js"></script><script type="text/javascript" >function sendcode(){var ajaxObject={url:"./SendcodeServlet",type:"GET",data:"phonenumber="+document.getElementById("phonenumber").value,dataType:"text",success:function(data){ }}$.ajax(ajaxObject);}function checkcode(){var ajaxObject={url:"./CheckcodeServlet",type:"GET",data:{phonenumber:document.getElementById("phonenumber").value,checkword:document.getElementById("checkword").value},dataType:"text",success:function(data){ }}$.ajax(ajaxObject);}</script></head><body><input id="phonenumber" placeholder="请输入手机号" value="" /><br /><input id="checkword" placeholder="请输入验证码" value="" /><button onclick="sendcode()">发送验证码</button><br /><button onclick="checkcode()">提交</button></body>
</html>
这是登陆页面jsp的代码,其中有两个函数,分别来实现发送验证码和校验验证码
package com.xt.userinfo;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.xt.send_checkcode.tool.SMSUtils;/*** Servlet implementation class CheckServlet*/
public class SendcodeServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String mobile = request.getParameter("phonenumber");System.out.println(mobile);if(SMSUtils.isMobile(mobile)){try {SMSUtils.sendCode(mobile,"3953566");//发送验证码} catch (IOException e) {e.printStackTrace();}}}}
这是实现发送验证码的servlet,它获取到了登陆页面上的手机号,并调用smsutils中的sendCode方法将手机号传入,这样就能将验证码发送到手机了。
package com.xt.userinfo;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.xt.send_checkcode.tool.SMSUtils;/*** Servlet implementation class CheckcodeServlet*/
public class CheckcodeServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String code = request.getParameter("checkword");String mobile = request.getParameter("phonenumber");System.out.println(mobile);System.out.println(code);if(SMSUtils.verifyCode(mobile, code)) {System.out.println("success");request.getRequestDispatcher("/success.jsp").forward(request, response);}else {System.out.println("fail");request.getRequestDispatcher("/fail.jsp").forward(request, response);}}}
这是实现验证并登陆的servlet,它获取到页面上的手机号和你刚刚收到并输入的验证码,再调用smsutils中的verify方法并将这两个参数传入,如果返回true就会登陆成功
java 实现发送短信验证码(网易云)相关推荐
- java实现发送短信验证码、短信验证码防刷校验-49
一:认证服务环境搭建 1.新建gulimail-auth-server 2.整合相关依赖 <!--引入commom依赖--><dependency><groupId> ...
- java 实现发送短信验证码
java 发送短信验证码: package com.isoftstone.anze.convenient.utils;import java.io.BufferedReader; import jav ...
- java redis 发送短信验证码
public class Randomutil { private Randomutil() { } // 获取6位随机验证码 public static String getRandom() { S ...
- Java Redis发送短信验证码
package com.redis.demo;import redis.clients.jedis.Jedis;import java.util.Random;public class PhoneCo ...
- java短信验证码功能发送的验证码如何校验_java 实现发送短信验证码功能
原标题:java 实现发送短信验证码功能 如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信 的接口. 1. 安装sdk 下载地址: http://smsow.zhenz ...
- java短信验证码功能发送的验证码如何校验_Java实现发送短信验证码功能
一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在Java中使用HttpClient模拟POST请求或者GET请求(看短信平台要求,一般的情况下都是POST请求),调用短信平台提供的接口( ...
- Java 发送短信验证码
Java 发送短信验证码给手机 发送短信验证码其实很简单,就是调用一下第三方的短信API接口,填写参数,发送请求,第三方平台会将信息发送给对方手机当中 介绍 我个人测试所使用的第三方API是" ...
- java发送短信验证码带倒计时
分享一个完整的java发送短信验证码的完整实例,这是一个官方的使用demo,带有60秒倒计时功能. 效果: 我使用的是榛子云短信平台 , 官网地址:http://sms_developer.zhenz ...
- php注册榛子云短信验证,java + maven +榛子云短信 实现发送短信验证码功能
如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信的接口. 下载下来是jar文件,需要将jar发布到本地的maven仓库中, 在cmd环境下输入: mvn install ...
最新文章
- cv2.inrange()用法
- msm8974 camera driver添加新摄像头kernel hal修改
- english writing sample for professional
- matlab narxnet,请问吧里有大神做过MATLAB时间序列神经网络(NARX)吗?
- 中国牙膏产业深陷 “氟中毒”?
- 进程间通信之分别用共享内存和信号量实现卖票
- linux中断处理模式,Linux在保护模式下的中断处理分析.pdf
- MySQL查询语句(select)详解
- live writer不能首行缩进的问题
- shell脚本基本使用
- CakePHP中文手册【翻译】-基本概念
- 苹果6重置系统后无服务器,iphone6总是无服务,恢复初始设置就好了,然后一两天又不行了,怎么处理...
- 大数据相关精品资料包分享
- 迅雷下载遇到“应版权方要求无法下载”,怎么办
- python在视频上方加字_python 使用 MoviePy 给视频添加文字水印demo实现[附代码]
- 作业帮一面+二面+hr面
- 360Lib整体介绍
- 网络通信学习(四)——通过接入网进入互联网内部,探索接入网和网络运营商
- Android秋招秘籍,看我如何搞定BAT,Vivo,爱奇艺
- arm的linux怎么管理任务,【linux】arm mm内存管理
热门文章
- 云扩科技RPA机器人|助力零售行业数字转型新未来
- 【FTP工具类】提供FTP服务器的连接, 查找文件目录,及读取文件内容等操作
- 每天读一点好玩心理学--记忆
- 2019年Java就业前景如何?新手还能学Java开发吗?
- c语言16进制转10进制
- 基恩士KV06N程序 基恩士KV06N,昆仑通态触摸屏 全自动LED划线点装机,PLC本体伺服轴控制
- 超简单定制一个Notes库专门设置和存储用户头像
- Winds下如何使用CMD命令进入MySQL数据库
- lib vs 生成pdb_「pdb文件」VS PDB文件详解 - seo实验室
- FatFs文件系统移植过程及中度分析