前段时间自己做的一个小项目中,涉及到用短信验证码登录、注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来。

本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能。
发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较。
为了防止有广告嫌疑这里就不说短信平台是哪个了。
一般的第三方短信平台都会有他们自己的短信接口,只要读懂他们的接口稍作稍作改变就能满足自己的需求。
首先将短信平台接口代码列出:这里要下载三个jar包commons-logging-1.1.1.jar,commons-httpclient-3.1.jar,commons-codec-1.4.jar
import java.io.UnsupportedEncodingException;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
public class SendMsg_webchinese {
public static void main(String[] args)throws Exception
{
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn"); //该第三方短信服务地址
post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在头文件中设置转码
NameValuePair[] data ={ new NameValuePair("Uid", "本站用户名"),new NameValuePair("Key", "接口安全秘钥"),new NameValuePair("smsMob","手机号码"),new NameValuePair("smsText","验证码:8888")};
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int statusCode = post.getStatusCode();
System.out.println("statusCode:"+statusCode);
for(Header h : headers)
{
System.out.println(h.toString());
}
String result = new String(post.getResponseBodyAsString().getBytes("gbk"));
System.out.println(result); //打印返回消息状态
post.releaseConnection();
}
}
不难看出,我们想要发送的信息是在这行代码里面:NameValuePair[] data ={ new NameValuePair("Uid", "本站用户名"),new NameValuePair("Key", "接口安全秘钥"),new NameValuePair("smsMob","手机号码"),new NameValuePair("smsText","验证码:8888")};
该接口中还有一个result信息,它的作用是告诉用户短信发送的状态,1表示发送成功,其他的小于0的为失败,这里只要知道1是成功即可。
我们实际的操作中,验证码肯定是要我们自己生成的。将result信息与验证码一起得到,于是很容易想到用一个HashMap集合。下面是以项目自己的需求对接口的更改:
import java.util.HashMap;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import com.yuetile.utils.VerifyingCodeGenerator;
public class SendMsg_webchineseController {
public static HashMap<String,String> getMessageStatus(String phone)throws Exception{
HashMap<String,String> m=new HashMap<String,String>();
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn");
post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在头文件中设置转码
String code=VerifyingCodeGenerator.generate();//验证码
NameValuePair[] data ={ new NameValuePair("Uid", "****"),new NameValuePair("Key", "******"),new NameValuePair("smsMob",phone),new NameValuePair("smsText","您正在注册本站会员,本次验证码为:"+code+""+"有效时间为5分钟")};
m.put("code", code);
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int statusCode = post.getStatusCode();
System.out.println("statusCode:"+statusCode);
for(Header h : headers)
{
System.out.println(h.toString());
}
String result = new String(post.getResponseBodyAsString().getBytes("gbk"));
System.out.println(result); //打印返回消息状态
m.put("result", result);
post.releaseConnection();
return m;
}
}
***表示的是在第三方平台注册的账号密码。
ACTION层:
/**
* @author hang
* @Decription 注册,发送短信验证码,保存到Session中
* @param 封装客户端请求 POST
* @return 返回状态参数
* @throws Exception
*/
@ResponseBody
@RequestMapping(value = UrlDefine.Register.CHECKMESSAGEWORK, method = RequestMethod.POST)
public Object SendCheckMessage(HttpServletRequest request, @RequestBody UserBean u)
throws Exception {
String message = "发送成功";
String phone=u.getTelephone(); //获取到客户端发来的手机号
UserBean user = userService.getByPhone(phone);
if (user != null) {
message = "该手机号已被注册";
return new Response(Status.ERROR, message);
} else {
HashMap<String, String> m = SendMsg_webchineseController.getMessageStatus(phone); //应用发送短信接口
String result = m.get("result"); //获取到result值
if (result.trim().equals("1")) { //如果为1,表示成功发送
String code = m.get("code"); //获取发送的验证码内容
logger.info("发送的验证码:"+code); //打印日志
HttpSession session = request.getSession(); //设置session
session.setAttribute("code", code); //将短信验证码放到session中保存
session.setMaxInactiveInterval(60 * 5);//保存时间 暂时设定为5分钟
return new Response(Status.SUCCESS, message);
} else {
message = "短信发送失败";
return new Response(Status.ERROR, message);
}
}
}
这样就能发送成功了。
测试:
利用POSTMAN在本地进行测试:
结果:
到此发送成功。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# java
# 验证码
# java发送短信验证码
# Java实现短信验证码和国际短信群发功能的示例
# Java实现发送短信验证码功能
# java短信验证码获取次数限制实例
# Java实现短信发送验证码功能
# java实现发送短信验证码
# Java开发完整短信验证码功能的全过程
# Java实现用户短信验证码登录功能实例代码
# Java实现短信验证码服务的完整代码示例
# 自己的
# 第三方
# 短信平台
# 是在
# 发送短信
# 就能
# 客户端
# 稍作
# 短信发送
# 头文件
# 他们的
# 这一
# 会有
# 看了
# 基础上
# 已被
# 其他的
# 似懂非懂
# 很容易
相关文章:
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
html制作网站的步骤有哪些,iapp如何添加网页?
建站与域名管理如何高效结合?
购物网站制作公司有哪些,哪个购物网站比较好?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
如何在Golang中引入测试模块_Golang测试包导入与使用实践
音响网站制作视频教程,隆霸音响官方网站?
如何获取上海专业网站定制建站电话?
如何用花生壳三步快速搭建专属网站?
如何通过虚拟机搭建网站?详细步骤解析
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
如何零基础开发自助建站系统?完整教程解析
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
公司网站设计制作厂家,怎么创建自己的一个网站?
学校建站服务器如何选型才能满足性能需求?
建站之星上传入口如何快速找到?
网站app免费制作软件,能免费看各大网站视频的手机app?
电商网站制作公司有哪些,1688网是什么意思?
h5在线制作网站电脑版下载,h5网页制作软件?
5种Android数据存储方式汇总
公司网站制作价格怎么算,公司办个官网需要多少钱?
网站代码制作软件有哪些,如何生成自己网站的代码?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
深入理解Android中的xmlns:tools属性
定制建站模板如何实现SEO优化与智能系统配置?18字教程
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
北京网站制作的公司有哪些,北京白云观官方网站?
如何在云主机快速搭建网站站点?
如何快速登录WAP自助建站平台?
香港服务器如何优化才能显著提升网站加载速度?
如何在云主机上快速搭建多站点网站?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
Python如何创建带属性的XML节点
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
香港网站服务器数量如何影响SEO优化效果?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
北京专业网站制作设计师招聘,北京白云观官方网站?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
Python文件管理规范_工程实践说明【指导】
建站主机选哪家性价比最高?
学校为何禁止电信移动建设网站?
如何在宝塔面板创建新站点?
建站之星安装模板失败:服务器环境不兼容?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
如何用免费手机建站系统零基础打造专业网站?
北京企业网站设计制作公司,北京铁路集团官方网站?
网站制作难吗安全吗,做一个网站需要多久时间?
如何在Tomcat中配置并部署网站项目?
安徽网站建设与外贸建站服务专业定制方案
*请认真填写需求信息,我们会在24小时内与您取得联系。