基于Maven的Spring+SpringMVC+Hibernate 短信验证码

因为毕业设计的原因,在做注册登录时想添加找回密码功能,想试试看能不能用短信验证的方式,花了一天的终于搞定,总结如下:
先上效果图,感兴趣的再往下看:

(前台)
这里写图片描述

(后台)
这里写图片描述

(验证码)
这里写图片描述

(验证成功)
这里写图片描述

1、首先要注册短信平台,我用的是阿里大于的短信服务,因为注册就送10元代金券,非常适合我这种学生党和只需毕业设计演示的情况。

2、注册完成后
这里写图片描述

记住这两个,后面会用到

这里写图片描述

3、添加短信签名,要通过才能使用
这里写图片描述

4、添加短信模板
这里写图片描述

接下来就是开发:

首先需要导入这两个包:aliyun-java-sdk-core和aliyun-java-sdk-dysmsapi
下载链接:http://download.csdn.net/download/gzh_coder/10033207
不知道Maven怎么导入本地包的可以看我另外一篇文章:
http://blog.csdn.net/gzh_coder/article/details/78282127

jsp页面:

<!-- 存放返回的验证码 -->
<input type="hidden" name="keepCode" id="keepCode" value="gzh" />
<div class="form-group" style="display: true;" id="phoneDiv">
<label for="input_phone">
<span class="glyphicon glyphicon-phone"></span>&nbsp;
<label for="phone">密保手机</label></label> 
<input class="form-control input-lg" id="phone" name="phone" type="text" placeholder="请输入注册的密保手机!"
value="">
</div>

js

<!-- 获取输入值 -->
var phone = $("#phone").val();
<!-- 向controller传参 -->
var paras = "o_tel=" + phone;
$.post(path + "/message/sendMsg?" + paras,function(data) {
        if (data != null && typeof (data) != "undefined") {
                    var msg = data['code'];
                    <!-- 保存到隐藏的input -->
                    $("#keepCode").attr("value", msg);
                }
            }, "json");

Controller

@Controller
@RequestMapping("/message")
public class SmsController {
    @ResponseBody
    @RequestMapping(value = "/sendMsg",method = RequestMethod.POST)  
    public String sendMsg(HttpServletRequest request,HttpServletResponse response) throws ClientException {
         String phoneNumber = request.getParameter("o_tel");//获取前端传送过来的电话号码
         String randomNum = createRandomNum(6);//随机生成6位数的验证码
         String jsonContent = "{\"code\":\"" + randomNum + "\"}";//这里的code对应在阿里大于创建短信模板时的${code}
         Map<String, String> paramMap = new HashMap<>();
         paramMap.put("phoneNumber", phoneNumber);
         paramMap.put("msgSign", "短信签名的签名名称");//阿里大于创建短信签名的签名名称 
         paramMap.put("templateCode", "短信模板的    
模版CODE");//阿里大于创建短信模板的模版名称      
         paramMap.put("jsonContent", jsonContent);
         SendSmsResponse sendSmsResponse = AliyunMessageUtil.sendSms(paramMap); //阿里大于发送机制   
         if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
             System.out.println(paramMap);
             System.out.println("短信验正码发送成功!");       
         }else {
             System.out.println(sendSmsResponse.getCode()+" 短信发送失败!");   
         }
        return jsonContent;

        }
        /**
         * 生成随机数
         * @param num 位数
         * @return
         */
        public static String createRandomNum(int num){
         String randomNumStr = "";
         for(int i = 0; i < num;i ++){
          int randomNum = (int)(Math.random() * 10);
          randomNumStr += randomNum;
         }
         return randomNumStr;
        }
}

阿里大于封装的

public class AliyunMessageUtil {
    private static final String product = "Dysmsapi";
     //产品域名,开发者无需替换
     private static final String domain = "dysmsapi.aliyuncs.com";
     // 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
     private static final String accessKeyId = "你的accessKeyId ";
     private static final String accessKeySecret = "你的accessKeySecret";
     public static SendSmsResponse sendSms(Map<String, String> paramMap) throws com.aliyuncs.exceptions.ClientException {
      //可自助调整超时时间
      System.setProperty("sun.net.client.defaultConnectTimeout", "60000");
      System.setProperty("sun.net.client.defaultReadTimeout", "60000");
      //初始化acsClient,暂不支持region化
      IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
      DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
      IAcsClient acsClient = new DefaultAcsClient(profile);
      //组装请求对象-具体描述见控制台-文档部分内容
      SendSmsRequest request = new SendSmsRequest();
      //必填:待发送手机号
      request.setPhoneNumbers(paramMap.get("phoneNumber"));
      //必填:短信签名-可在短信控制台中找到
      request.setSignName(paramMap.get("msgSign"));
      //必填:短信模板-可在短信控制台中找到
      request.setTemplateCode(paramMap.get("templateCode"));
      //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为$[code]"时,此处的值为
      request.setTemplateParam(paramMap.get("jsonContent"));
      //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
    //  request.setSmsUpExtendCode(paramMap.get("extendCode"));
      //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
    //  request.setOutId(paramMap.get("outId"));
      //hint 此处可能会抛出异常,注意catch
      SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
      return sendSmsResponse;
     }
}

全部结束

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值