`

限制一分钟只能发送一次手机短信

    博客分类:
  • Java
阅读更多

为什么要限制一分钟之内只能发送一次手机短信呢?

防止恶意攻击.

什么场景需要发送手机短信?

(a)手机号注册

(b)通过手机找回密码

(c)手机号绑定,手机号换绑

(d)转账时手机号接收动态口令(一次一密)

 

1,前端

一般前端会有倒计时,在倒计时的过程中是不允许点击"发送短信"按钮的:



但是如果用户刷新页面呢?

如果刷新页面,那么页面的倒计时就会中断. 

这是需要服务器端提供支持:服务器端要记录上次发送短信的时间戳

 

2,后台

第一次发送时lastSendSMSTime null,于是设置当前时间A,说明不需要倒计时

第二次访问时,lastSendSMSTime 不为null,获取其值,为时间A;

同时获取当前时间B,计算时间A,和时间B 的差量delter.

业务逻辑是:delter60进行比较,如果delter>60,说明两次发短信的时间相差60,允许发送,会重置时间为当前时间;

delter<=60,允许发送,并且不会重置时间

 

 

后台获取倒计时剩余时间的方法:

/***
     * 倒计时还剩余多长时间
     * @param mobile : 手机号
     * @param reallySendSMS : 是否真正发送短信
     * @return : second
     */
    public int sMSWaitingTime(String mobile,boolean reallySendSMS) {
    	HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
		HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
		RedisHelper rdsHelper = RedisHelper.getInstance();
		String cid = getCid(request, response);
		
        String lastSendSMSTime = rdsHelper.getCache(cid+mobile);

        if(StringUtil.isNullOrEmpty(lastSendSMSTime)) {
        	if(reallySendSMS){
        		saveExpxKeyCache(request, response, mobile, String.valueOf(DateTimeUtil.getCurrentTimeSecond()),60);
        	}
            return 0;//不需要倒计时
        } else {
            long lastSendSMSTimeSecond=Long.parseLong(lastSendSMSTime);
        	long currentTimeSecond=DateTimeUtil.getCurrentTimeSecond();
        	int delter=(int) (currentTimeSecond-lastSendSMSTimeSecond);
        	if(delter>=60){
                return 0;//不需要倒计时
        	}else{
        		return 60-delter;
        	}
        }
    }

 接口:

/**
     * @return {"result":true,"remainingSecond":39}<br>
     * {"result":false,"errorFieldName":"mobile","remainingSecond":0}
     * @api {get} /wap/countdownSMS 发送手机短信倒计时剩余时间
     * @apiName 发送手机短信倒计时剩余时间
     * @apiGroup Login
     * @apiVersion 1.0.0
     * @apiDescription 发送手机短信倒计时剩余时间
     * @apiPermission 无权限要求
     * @apiParam {String} mobile        	手机号
     */
    @SessionCheck
    @RequestMapping("/countSMS")
    @ResponseBody
    public String countdownSMS(HttpSession httpSession,
                               HttpServletRequest request
            , String mobile) {
        SMSRemainingTimeDto dto = new SMSRemainingTimeDto();
        if (StringUtil.isNullOrEmpty(mobile)) {
            dto.setResult(false);
            dto.setErrorFieldName("mobile");
            dto.setErrorMessage("请输入手机号");
            return dto.toJson();
        } else {
            int remainingTime = sMSWaitingTime(mobile, false);
            dto.setResult(true);
            dto.setRemainingSecond(remainingTime);
            return dto.toJson();
        }
    }

接口功能:返回倒计时的剩余秒数 

 

3,什么时候调用该接口呢?

(1)手机号输入框失去焦点时;

(2)页面加载完成时,判断手机号输入框是否有值,有值就调用.

window.onload 或者jquery的$(function)

 

 

 

  • 大小: 11.8 KB
分享到:
评论

相关推荐

    java发送短信系列之限制发送频率

    主要为大家详细介绍了java发送短信系列之限制发送频率,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    基于PHP实现短信验证码发送次数限制

    主要介绍了基于PHP实现短信验证码发送次数限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    短信彩信群发系统平台源码1.0版

    提交十万条号码到服务器,只需要一分钟。 14.客户发送的号码可以随意打包下载。 15.设置短信发送时间,可以设置周日到周六中的任一天可以发送。也可以设置发送的具体时间,例如:星期日到星期六的07:00到20:30.可以...

    yii2-message-sms:yii2混乱

    160021 : 【短信】相同的内容发给同一手机一天中只能发一次 160022 : 【短信】对同一个手机一天发送的短信超过限制次数 短信网关配置文件 return [ 'smser' =&gt; [ 'class' =&gt; 'app\extensions\message\Smser', '...

    智能手机作文.docx

    一开始只能用于通电话、发短信,渐渐地我们可以用手机听音乐、玩游戏。而现在的手机除了那些简单的功能以外还加入了现代化元素,除了手机可以看电视以外还可以上网、上QQ还可以与别人视频通话聊天。如此可见手机在...

    IOS开发中如何设计短信验证码防刷机制

    从发送验证码开始,前端(客户端)会进行一个60秒的倒数,在这一分钟之内,用户是无法提交多次发送信息的请求的。这种方法虽然使用得比较普遍,但是却不是非常有用,技术稍微好点的人完全可以绕过这个限制,直接发送...

    Redis实现高并发计数器

    业务需求中经常有需要用到计数器的场景:譬如一个手机号一天限制发送5条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。使用Redis的Incr自增命令可以轻松实现以上需求。以一个接口一天限制调用...

    gosms:您在Go中的本地SMS网关

    一次支持多个设备 部署 用调制解调器的COM端口更新conf.ini [DEVICES]部分。 对于前。 COM10或/dev/USBtty2 跑步 API规范 / api / sms / [ POST ] 参数移动 手机号码发送消息给 该数字应具有国家/地区代码前缀 ...

    dtu固件参考手册

    是否有可能让在第一次去连接server时上报自己ID(可以自定义)功能?答:支持自定义,详见“配置保存指令”的register字段。在非透传模式报文也是发的AT命令格式吗?答:不用AT,非透传模式参考指令“多通道通信报文恢复...

    BlackBerry开发平台配置及入门介绍(傻瓜教程)

    最近进行的一项Ipsos-Reid调研表明.:由于能够及时访问信息和进行通信、大多数BlackBerry用户每天都可以将53分钟的停工时间转化为工作时间。通过使专业人士在远离办公室时也能继续工作、BlackBerry可以将整个团队的...

    王中王羽毛球馆管理软件V5.3

    支持预订到达前30(可以设置)分钟每1(可以设置)分种提示一次 场地到时退场提醒,也支持设置提前时间,频率。 提示方式多样,会出现小老人,同时状态栏出现信息图标。 支持声音提示 2.10两种收费方式。 普通【租...

    discuz 2.2Fsp1插件加强版

    用户评分记录 版主管理记录 增加搜索功能 用户可自选贴子排序方式 用户级别与发贴数的关联 用户访问记录 选择顏色的补丁 新主題後面會顯示New的圖片 新短信提示 限制游客浏览精华和置顶...

    WindowsServer2016系统管理视频教程csdn.txt

    7-8配置登录脚本 有人登录服务器给你的手机发短信05:02 第8章在企业环境部署打印机1小时7节 8-1配置打印服务器15:43 8-2连接网络打印机10:49 8-3使用组策略部署打印机09:42 8-4设置打印权限05:50 8-5设置打印机的...

    仿世纪佳缘婚介交友系统5.3 ASP+SQL

    、登录每次赠送金币,会员每天登录赠送金币数,系统设计一天只能赠送一次。  (5)邮件选项设置: 、邮件组件选择(不支持、JMAIL、CDONTS、ASPEMAIL),一般虚拟主机都是安装Jmail组件。用鼠标选择下拉菜单...

    UCHOME二次开发交友程序 v2.0 GBK.rar

    27、附带完整的全新安装和升级教程,只需鼠标操作,几分钟就可搭建起一个和点梦缘交友网一模一样的交友网站!28、增加同城异性会员定期推荐邮件功能,对于N(N的数值可在后台配置)天未登录的会员,可以向其邮箱发送...

    Windows Server 2008系统管理视频教程csdn.txt

    11-14限制一个用户一个会话01:16 11-15介绍终端服务和终端服务 每用户 每设备许可证05:18 11-16安装终端服务02:55 11-17安装终端服务02:55 11-18终端服务 安装许可证03:47 11-19安装终端服务和TS Web访问04:10 11-20...

    鸿威台球计费软件操作说明书

    若选择执行单个销售方式,则销售时只能单个商品出售,不可以一次出售多个商品。若一次出售多个,则选择执行多个销售方式。当商品数量少于等于销售数量时可以进行选择提醒、直接销售、不允许销售。 临时开关灯设置是...

    猪猪家住宿管理系统 v1.1.zip

    右键单击选中的房间号,选中“修改入住信息”,下拉房间号,选中另一房间号,完成后点击“修改入住信息并发送短信”即可办理换房。 4、办理入住登记完成,如何再次修改登记信息? 右键单击需要修改/删除的房间号,...

    EduSoho网校系统 V8.2.25

    修复:少数情况下直播课程通知发送重复短信的问题 8.2.29(2018-5-17) 修复:少数情况下修改课程有效期功能失效的问题 修复:图文任务后台预览格式与前台显示效果不符的问题 修复:课程任务详情导出数据出错的...

    助手工具为Instagram「Helper Tools for Instagram」-crx插件

    版本0.308 - 允许将获取的用户数量限制为第一个返回的用户数量。从我的观察来看,最初的追随者/追随者是在一开始就返回的,因此限制产出对于获得最新的关系是有用的,特别是对于关系数量巨大的账户。如果在输入框中...

Global site tag (gtag.js) - Google Analytics