链接: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 实现发送短信验证码(网易云)相关推荐

  1. java实现发送短信验证码、短信验证码防刷校验-49

    一:认证服务环境搭建 1.新建gulimail-auth-server 2.整合相关依赖 <!--引入commom依赖--><dependency><groupId> ...

  2. java 实现发送短信验证码

    java 发送短信验证码: package com.isoftstone.anze.convenient.utils;import java.io.BufferedReader; import jav ...

  3. java redis 发送短信验证码

    public class Randomutil { private Randomutil() { } // 获取6位随机验证码 public static String getRandom() { S ...

  4. Java Redis发送短信验证码

    package com.redis.demo;import redis.clients.jedis.Jedis;import java.util.Random;public class PhoneCo ...

  5. java短信验证码功能发送的验证码如何校验_java 实现发送短信验证码功能

    原标题:java 实现发送短信验证码功能 如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信 的接口. 1. 安装sdk 下载地址: http://smsow.zhenz ...

  6. java短信验证码功能发送的验证码如何校验_Java实现发送短信验证码功能

    一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在Java中使用HttpClient模拟POST请求或者GET请求(看短信平台要求,一般的情况下都是POST请求),调用短信平台提供的接口( ...

  7. Java 发送短信验证码

    Java 发送短信验证码给手机 发送短信验证码其实很简单,就是调用一下第三方的短信API接口,填写参数,发送请求,第三方平台会将信息发送给对方手机当中 介绍 我个人测试所使用的第三方API是" ...

  8. java发送短信验证码带倒计时

    分享一个完整的java发送短信验证码的完整实例,这是一个官方的使用demo,带有60秒倒计时功能. 效果: 我使用的是榛子云短信平台 , 官网地址:http://sms_developer.zhenz ...

  9. php注册榛子云短信验证,java + maven +榛子云短信 实现发送短信验证码功能

    如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信的接口. 下载下来是jar文件,需要将jar发布到本地的maven仓库中, 在cmd环境下输入: mvn install ...

最新文章

  1. cv2.inrange()用法
  2. msm8974 camera driver添加新摄像头kernel hal修改
  3. english writing sample for professional
  4. matlab narxnet,请问吧里有大神做过MATLAB时间序列神经网络(NARX)吗?
  5. 中国牙膏产业深陷 “氟中毒”?
  6. 进程间通信之分别用共享内存和信号量实现卖票
  7. linux中断处理模式,Linux在保护模式下的中断处理分析.pdf
  8. MySQL查询语句(select)详解
  9. live writer不能首行缩进的问题
  10. shell脚本基本使用
  11. CakePHP中文手册【翻译】-基本概念
  12. 苹果6重置系统后无服务器,iphone6总是无服务,恢复初始设置就好了,然后一两天又不行了,怎么处理...
  13. 大数据相关精品资料包分享
  14. 迅雷下载遇到“应版权方要求无法下载”,怎么办
  15. python在视频上方加字_python 使用 MoviePy 给视频添加文字水印demo实现[附代码]
  16. 作业帮一面+二面+hr面
  17. 360Lib整体介绍
  18. 网络通信学习(四)——通过接入网进入互联网内部,探索接入网和网络运营商
  19. Android秋招秘籍,看我如何搞定BAT,Vivo,爱奇艺
  20. arm的linux怎么管理任务,【linux】arm mm内存管理

热门文章

  1. 云扩科技RPA机器人|助力零售行业数字转型新未来
  2. 【FTP工具类】提供FTP服务器的连接, 查找文件目录,及读取文件内容等操作
  3. 每天读一点好玩心理学--记忆
  4. 2019年Java就业前景如何?新手还能学Java开发吗?
  5. c语言16进制转10进制
  6. 基恩士KV06N程序 基恩士KV06N,昆仑通态触摸屏 全自动LED划线点装机,PLC本体伺服轴控制
  7. 超简单定制一个Notes库专门设置和存储用户头像
  8. Winds下如何使用CMD命令进入MySQL数据库
  9. lib vs 生成pdb_「pdb文件」VS PDB文件详解 - seo实验室
  10. FatFs文件系统移植过程及中度分析