java+jsp如何实现发送手机短信验证登录

我的qq  2038373094

1、借助第三方免费的sdk接口,下载java sdk

http://smsow.zhenzikj.com/doc/sdk.html

java+jsp如何实现发送手机短信验证登录_第1张图片

下载后的SDK只包含一个jar文件,并且不依赖任何其他jar包或文件,直接导入到工程中即可使用。

 把下载结束的jar包导入工程中

2、还需要带入三个包:https://download.csdn.net/download/qq_37591637/11162911

commons-httpclient-3.1.jar

commons-logging-1.0.4.jar

codec-1.3.jar

3、查看自己的AppId、AppSecret,这个后面会用到

java+jsp如何实现发送手机短信验证登录_第2张图片


 

4、可以编辑短信模板,这样的好处不需要每次发送短信都要输入

java+jsp如何实现发送手机短信验证登录_第3张图片


思路:

1、前端用户填写手机号码,点击发送校验码,点击这个事件把手机号码通过ajax传给后台

2、后台随机生成一个校验码,把这个校验码通过短信接口发送给相应的手机用户

3、后台把校验码和当前的时间存储起来,当用户在前端页面填写校验码的时候,把两个值进行比较,把两个时间做差,5分钟之内或者半个小时之内;


jsp代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
%>




手机获取校验码操作
  



   
手机号:
验证码:

java后台代码

我采用的是ssh框架

package cn.com.service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
import com.zhenzi.sms.ZhenziSmsClient;
@Repository(value="getMessage")
@Scope("prototype")
public class GetMessage {
private String tell;

public String getTell() {
	return tell;
}

public void setTell(String tell) {
	this.tell = tell;
}

public String sendSms() {
	   JSONObject json=null;
		//生成6位验证码
		String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000);
		//发送短信
		ZhenziSmsClient client = new ZhenziSmsClient("https://sms_developer.zhenzikj.com", "你的id", "你的密钥");
		String result;
		try {
			result = client.send(tell, "在线心理测试平台,您的验证码为:" + verifyCode + ",该码有效期为5分钟,若非本人操作,请忽略这条信息");
			json = JSONObject.fromObject(result);
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		if(json.getInt("code") != 0){System.out.println("发送短信失败");}
		//将验证码给前台做校验
		HttpServletResponse response=ServletActionContext.getResponse();
		JSONObject js=new JSONObject();	
		js.put("screct", verifyCode);
		try {
			response.getWriter().write(js.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	return null;
}
}

js代码

var jym;
var time;
function getmess(){
	//1.获取手机号码
	var tell=$("#number").val();
	//开始ajax
	$.ajax({
	    type : "post",
		url : "http://localhost:8080/PsychoSys/sendmess.action",
		dataType :"text",
		data : {
			tell : tell
		},
		success : function(ret) {
			//关闭模态框
			var jb= eval('(' + ret + ')');  
		   //根据:分成前后两个,然后前面的校验码,后面的是时间,存储起来为全局变量
			jym=jb.screct;
			//获取当前的时间
			time =new Date().getTime();
			alert(jym);
		},
	})
	//开始ajax
}
function check(){
	var my=$("#jym").val();
	var time1 =new Date().getTime();
	var zc=(time1-time)/300000;
	alert(zc);
	if(my==jym&&zc<5){
		alert("输入正确");
	}else{
		alert("输入错误");
	}
}

不足之处

1、还有需要完善的地方,点击获取验证码,是1分钟才能点击一次的

2、点击验证码会有倒计时

你可能感兴趣的:(JAVA)