文档章节

Spring MVC短信验证码的实现

gulf
 gulf
发布于 2016/09/30 14:32
字数 619
阅读 1512
收藏 3

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

短信接口

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

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

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

前端界面

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

sms-captcha

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";
    }
}

本文转载自:http://www.huqiwen.com/2016/04/22/spring-mvc-sms-captcha/

共有 人打赏支持
gulf
粉丝 13
博文 277
码字总数 156947
作品 0
广州
程序员
私信 提问
SpringBoot 集成 Spring Security(8)——短信验证码登录

版权声明:本文版权归Jitwxs所有,欢迎转载,但未经作者同意必须保留原文链接。 https://blog.csdn.net/yuanlaijike/article/details/86164160 经过前面七章的学习,我们已经算入门 Spring S...

Jitwxs
01/09
0
0
spring 3 mvc 有数据回填的功能吗

spring 3 mvc 有数据回填的功能吗,我知道Struts2是有此功能的 就是在注册或者登录的时候验证码或者密码输错了,用户名可以自动回填 还有Spring MVC 如果有此功能的话是怎么实现的?...

sc19860709
2013/01/29
605
5
Spring mvc-kaptcha 验证码

生成验证码的方式有很多,个人认为较为灵活方便的是Kaptcha ,他是基于SimpleCaptcha的开源项目。使用Kaptcha 生成验证码十分简单并且参数可以进行自定义。只需添加jar包配置下就可以使用。k...

Candy_Desire
2014/03/18
0
1
Spring Security之短信登录

实现短信验证码登录 前面实现了 用户名+密码 的登录方式,现在实现一下短信验证码登录. 开发短信验证码接口 短信验证码和图形验证码类似,用户从手机短信得到验证码和从图片得到验证码类似. 校...

yysue
2018/10/23
0
0
Spring mvc 中使用 kaptcha 验证码

生成验证码的方式有很多,个人认为较为灵活方便的是Kaptcha ,他是基于SimpleCaptcha的开源项目。使用Kaptcha 生成验证码十分简单并且参数可以进行自定义。只需添加jar包配置下就可以使用。k...

凯文加内特
2015/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

spring aop学习

1.aop和spring aop的关系? aop是一种思想,spring aop是aop的一种实现。 2.Spring aop和AspectJ的关系? 这两种都是实现aop的,spring借助AspectJ的语法实现aop的功能 3.@AspectJ support和...

llsydn
24分钟前
1
0
OSChina 周六乱弹 —— 世界的源代码

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @小鱼丁 :#今日歌曲推荐# 分享Jason Mraz的单曲《Prettiest Friend (Demo)》: 《Prettiest Friend (Demo)》- Jason Mraz 手机党少年们想听歌...

小小编辑
今天
156
5
java框架学习日志-13(Mybatis基本概念和简单的例子)

在mybatis初次学习Mybatis的时候,遇到了很多问题,虽然阿里云的视频有教学,但是视频教学所使用的软件和我自己使用的软件不用,我自己用的数据库是oracle数据库,开发环境是idea。而且视频中...

白话
今天
12
0
Java基础:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: /** The value is used for character storage. */private final cha...

watermelon11
今天
6
0
mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部