栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java短信验证码获取次数限制实例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java短信验证码获取次数限制实例

现在不管什么项目,用到短信验证功能,都会在程序上设计一个短信验证码的获取次数限制,这样主要是避免短信验证码接口被刷。

前一段正好做一个项目的用户短信验证码登录功能,就研究了以下,下面贴出来分享一下。

这里涉及到的短信接口,用的第三方短信接口—动力思维思维乐信的(http://www.lx598.com/),如果想了解短信接口接入,可以到他们官网,查看下短信接口API文档说明,参考下面的代码应该就能弄明白。

用户注册部分,主要代码如下:

//主要js方法:

//获取手机验证码:

function getRegCode() {
    if($.trim($('#inputCaptcha').val()) == ''){
$('#imgRs').html("图形验证码不能为空");
$('#inputCaptcha').select();
return;
     }
    
    if (!isPhoneNum($('#phoneRe').val())) {
      document.getElementById('phoneReInfo').innerHTML = '请填写有效的11位手机号码';
    } else {
      document.getElementById('phoneReInfo').innerHTML = '注册后用手机号码进行登录';
    

      $.ajax({
 url : "${path}/account/checkMob",
 type : "POST",
 data: "account.ACCMOB=" + $('#phoneRe').val(),
 contentType : "application/x-www-form-urlencoded;charset=utf-8",
 async : false,
 success : function(data) {
   res = data;
   if (data == 1) {
     document.getElementById('phoneReInfo').innerHTML = '该手机号已被注册';
     refreshYzm();
   } else {
     document.getElementById('phoneReInfo').innerHTML = '该手机号可用';
     $.ajax({
url : "${path}/account/reAimcodeGetVeCode",
type : "POST",
data: "account.ACCMOB="
    + $('#phoneRe').val()
    + "&fromSource=4&smsCount="+$('#smsCount').val()
    +"&searchName="+$.trim($('#inputCaptcha').val()),
contentType : "application/x-www-form-urlencoded;charset=utf-8",
async : false,
success : function(data) {
  myArray = data.split("&");
  if (myArray[0] == '发送成功!') {
    canCaptcha = true;
    document.getElementById('phoneReInfo').innerHTML = '验证码已发送,请注意查收!
    accountFID = myArray[1];
    }else if(data == '限制申请'){
    document.getElementById('phoneReInfo').innerHTML = '一个手机号码一天最多只能申请3次!';
    refreshYzm();
  }else if(data == '验证码错误'){
    document.getElementById('phoneReInfo').innerHTML = '验证码错误!';
    refreshYzm();
  }
},
error : function() {
  alert('异常,内部验证出错!'+data);
}
     });

   }
 },
error : function() {
alert('异常,验证出错!');
     }
   });
    }
    var smsCount=parseInt($('#smsCount').val());
    smsCount=smsCount<3?smsCount+1:3;
    $('#smsCount').val(smsCount);
  }
// 注册新用户
// account 为用户类

  @Action(value = "reAimcodeGetVeCode")
  public void reAimcodeGetVeCode() {
    PrintWriter out;
    String result = "验证码申请失败!请重试!";
    try {
      smsUnit = new SmsUnit(ConfUtil.getProperty("sys_sms_server"));
      if (null != account.getACCMOB() && !account.getACCMOB().equals("")) {
 account.setACCSTATUS(new BigDecimal(1));//设置使用状态:未用
 String verifyCode = String
     .valueOf(new Random().nextInt(899999) + 100000);//生成短信验证码
 account.setFSECURITYCODE(verifyCode);
 account.setACCCREATEDATE(new Date());
 
 Calendar c = Calendar.getInstance();
 c.add(Calendar.DAY_OF_MONTH, 1); // 设置验证码失效时间为24小时
 account.setFREGISTERSOURCE(fromSource);//设置注册来源
 // 判断该手机是否获取过验证码
 AccountCriteria accountCriteria = new AccountCriteria();
 accountCriteria.createCriteria().andACCMOBEqualTo(
     account.getACCMOB());
 List accs = accountService
     .selectByExample(accountCriteria);
 //验证码申请次数
 int re = 0;
 Integer cishu = 0;
 //如果用户不存在
 if (accs == null || accs.isEmpty()) {
   cishu = 1;
   account.setSDKURL("1");
   account.setFSECURITYOUTTIME(c.getTime());//设置验证码有效时间
   BigDecimal accid=accountService.getPrimaryKey();
   account.setFID(accid);
   re = accountService.insertSelective(account,IPUtil.getRealIP(request));
   cookie cookie=new cookie("id" , accid.toString());
   cookie.setMaxAge(Integer.MAX_VALUE);
   response.addcookie(cookie);
 } else {
   Account ac = accs.get(0);
   account.setFID(ac.getFID());
   Date date = new Date();
   // 通过时间判定申请验证码次数
   //如果是新的一天,则使用次数改为1
   if (date.getDate() >= ac.getFSECURITYOUTTIME().getDate()) {
     account.setSDKURL("1");
   } else {
     Integer count = Integer.parseInt(ac.getSDKURL());
     account.setSDKURL(count + 1 + "");//不是新的一天则次数+1
   }
   cishu = Integer.parseInt(account.getSDKURL());
   account.setFSECURITYOUTTIME(c.getTime());
   if (cishu <= 3)
     re = accountService
  .updateByPrimaryKeySelective(account); //使用修改方法保存验证码发送信息
 }

 if (re > 0 && cishu <= 3) {
   request.getSession().removeAttribute(ConstValues.WEB_SESSION_PROMOTE);
   AccountCriteria ac = new AccountCriteria();
   ac.createCriteria().andACCMOBEqualTo(account.getACCMOB());
   List acList = new ArrayList();
   acList = accountService.selectByExample(ac);
   if (acList != null && acList.size() > 0) {
     // 这里执行短信发送
     
     String content = "您的验证码为:" + verifyCode+",该码有效期为24小时,该码只能使用一次!【短信签名】";
     SendSmsReply sendSmsReply = smsUnit.sendSms(accName,accPwd ,account.getACCMOB(),content,"");
 
//调用第三方接口发送短信     result = sendSmsReply.getReplyMsg() + "&"
  + acList.get(0).getFID() + "&"
  + acList.get(0).getSDKURL();
   }
 } else if (cishu > 3) {
   result = "限制申请";
 }
      }
    } catch (Exception e) {
      logger.error("获取验证码失败", e);
    } finally {
      try {
 response.setContentType("text/html;charset=UTF-8");
 response.setCharacterEncoding("UTF-8");
 out = response.getWriter();
 out.write(result);
      } catch (IOException e) {
 logger.error("", e);
      }
    }
  }

//这是动力思维乐信第三方短信接口的发送短信功能部分参考代码:


 public static String sendSms(String accName,String accPwd,String mobies,String content,String schTime){
   StringBuffer sb = new StringBuffer("http://sdk.lx198.com/sdk/send2?");
   try {
     String seed=new SimpleDateFormat(dateFormatStr).format(new Date());
     sb.append("&accName="+accName); 
     sb.append("&seed="+seed);
     sb.append("&accPwd="+MD5.getMd5String(MD5.getMd5String(accPwd)+seed)); 
     sb.append("&aimcodes="+mobies);
     sb.append("&schTime="+URLEncoder.encode(schTime,"UTF-8")); //空格标点符号做encode转换
     sb.append("&content="+URLEncoder.encode(content,"UTF-8")); //中文做encode转换
     URL url = new URL(sb.toString());
     HttpURLConnection connection = (HttpURLConnection) url.openConnection();
     connection.setRequestMethod("POST");
     BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
     return in.readLine();
   } catch (Exception e) {
     e.printStackTrace();
   }
   return null;
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/142265.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号