Spring MVC 中 短信验证码功能的实现方法
程序员文章站
2024-03-13 11:31:27
在外部网站中短信的验证很有必要,比如在实现注册、验证用户信息等的情况下。在springmvc中的实现如下:
短信接口
短信接口,有些企业会购买的有移动的短信平台接口。如...
在外部网站中短信的验证很有必要,比如在实现注册、验证用户信息等的情况下。在springmvc中的实现如下:
短信接口
短信接口,有些企业会购买的有移动的短信平台接口。如果是个人或者是小企业可以使用一些云服务的。比如百度的api store上面的。
我使用的是:http://apistore.baidu.com/apiworks/servicedetail/1018.html
当然短信接口肯定都是要付费的,而且是基于模板的,具体的使用说明可以看这个网址里面的使用说明。
前端界面
前端的界面,可能如下,点击获取验证码,然后按钮变为灰色并且倒计时。(手机号是我的~~)
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 中 短信验证码功能的实现方法,希望对大家有所帮助
上一篇: Android内存泄漏实战解析