欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring MVC 中 短信验证码功能的实现方法

程序员文章站 2024-03-12 15:33:20
在外部网站中短信的验证很有必要,比如在实现注册、验证用户信息等的情况下。在springmvc中的实现如下: 短信接口 短信接口,有些企业会购买的有移动的短信平台接口。如...

在外部网站中短信的验证很有必要,比如在实现注册、验证用户信息等的情况下。在springmvc中的实现如下:

短信接口

短信接口,有些企业会购买的有移动的短信平台接口。如果是个人或者是小企业可以使用一些云服务的。比如百度的api store上面的。

我使用的是:http://apistore.baidu.com/apiworks/servicedetail/1018.html

当然短信接口肯定都是要付费的,而且是基于模板的,具体的使用说明可以看这个网址里面的使用说明。

前端界面

前端的界面,可能如下,点击获取验证码,然后按钮变为灰色并且倒计时。(手机号是我的~~)

Spring MVC 中 短信验证码功能的实现方法

html代码就不写了,js如下:vailidationcode是获取验证码按钮的id。phone是手机号码的id,手机号码只是简单的验证了,如果是要更精确,使用正则,其中的url的sendsms是后台的springmvc的路径。

$("#validationcode").click(function(){
var phone = $("#phone").val();
if($("#phone").val() && $("#phone").val().length == 11){
$.ajax({
cache : false,
url : "sendsms",
data : {phone : phone}
});
updatebuttonstatus();
}else {
alert("请输入合法的手机号");
}
});
var countdown=60;
function updatebuttonstatus(){
var phone = $("#validationcode");
if (countdown == 0) {
phone.attr("disabled","false");
phone.val("免费获取验证码");
countdown = 60;
return;
} else {
phone.attr("disabled","true");
phone.val("重新发送(" + countdown + ")");
countdown--;
}
settimeout(function() {
updatebuttonstatus() }
,1000)
}

后端代码

@requestmapping(value = "/sendsms")
@responsebody
public string sendsms(@requestparam("phone") string phone, httpservletrequest request){
stringbuilder code = new stringbuilder();
random random = new random();
// 生成6位验证码
for (int i = 0; i < 6; i++) {
code.append(string.valueof(random.nextint(10)));
}
httpsession session = request.getsession();
session.setattribute(validate_phone, phone);
session.setattribute(validate_phone_code, code.tostring());
session.setattribute(send_code_time, new date().gettime());
string smstext = "您的验证码是:"+code;
smsutil.send(phone,smstext);
return "success";
}

其中的smsutil是封装的上面的短信接口的发送类。参考如下,其中的api_key改成自己的。

public class smsutil {
static string httpurl = "http://apis.baidu.com/kingtto_media/106sms/106sms";
final static string api_key = "xxxx";
public static string send(string phone,string content) {
bufferedreader reader = null;
string result = null;
stringbuffer sbf = new stringbuffer();
try {
string httparg = "mobile="+phone+"&content="+urlencoder.encode(content,"utf-8")+"&tag=2";
httpurl = httpurl + "?" + httparg ;
url url = new url(httpurl);
httpurlconnection connection = (httpurlconnection) url
.openconnection();
connection.setrequestmethod("get");
// 填入apikey到http header
connection.setrequestproperty("apikey",api_key);
connection.connect();
inputstream is = connection.getinputstream();
reader = new bufferedreader(new inputstreamreader(is, "utf-8"));
string strread = null;
while ((strread = reader.readline()) != null) {
sbf.append(strread);
sbf.append("\r\n");
}
reader.close();
result = sbf.tostring();
} catch (exception e) {
e.printstacktrace();
}
return result;
}
}

前台的表单提交前还需要使用ajax做一下表单的验证,验证一下验证码是否正确:

@requestmapping("/validate")
@responsebody
protected string validate(httpservletrequest request,@requestparam("phone") string inputphone,@requestparam ("code") string inputcode){
httpsession session = request.getsession();
string code = (string) session.getattribute(validate_phone_code);
string phone = (string) session.getattribute(validate_phone);
if(phone.equals(inputphone) && code.equalsignorecase(inputcode)){
return "success";
}else{
return "failure";
}
}

以上所述是小编给大家介绍的spring mvc 中 短信验证码功能的实现方法,希望对大家有所帮助