接收短信验证码条数限制(java发送短信验证码限制)

今天是个周六,还在苦逼加班的我对那些休周末的同行表达羡慕嫉妒,对那么同样加班的同行共勉吧~~

整理了下这周的工作进度。除了项目试上线以外也就是补充补充之前遗留下的小问题了。这篇文章就是说手机号每天接受验证码的条数限制。

我们现在的好多程序注册需要手机号并且发送验证码来验证手机号的真伪。以前常用的就是阿里的发送短信的功能(感觉这个真的很常用,阿里的产品还是值得信赖的)。不过我们这个项目采用的是极光的短信功能。不过这个其实不重要,因为我们来限制一个手机号 一天可以发多少短信和短信平台无关。我这里是因为老板说听说某某程序员说受到过这样的攻击,不到一个小时一个产品发出去几千块钱的短信费用。而且我另一个朋友也说过如果不加以限制可能他一个多线程跑过去我们平台的短信费用立刻欠费。

这里说一下具体的思路:因为确实有时候我们在注册的时候会发送各种意外。比如当时信号不好啊,或者莫名其妙的手机短信没收到啊不可避免的,所以一个人一天只能发一条短信肯定也不合理。然后我们老板目前设置的是一个人一天能接收的验证码是10条(多了少了是可以设置的。不过我接下的例子也是一个手机号码一天可以接收十条验证码)。我这里采用的是存redis来实现这一个功能的(感觉这里数据库也可以实现,但是不如reids好。最近敲喜欢redis的说,用起来得心应手,哈哈)。就是每次调用发送验证码这个接口都会判断手机号码是否在redis中存为key了。如果没有则创建一个key为手机号码value是1.因为redis中不支持数字所以我是1+“”将其变为了string类型。如果redis中已经有这个key了则将此key的值取出来加1再存进redis中。这里在做的时候过期问题有一点小纠结。最后想明白了。我们老板的要求是每天。也就是这个key-value的存活期应该是到今天结束。所以我又专门做了个小工具类来获取当前时间到今天结束时间(也就是23点59分59秒999毫秒+1毫秒的时间)的毫秒数。并将此作为这个key的到期时间的(关于这个我是给予我的实际情况来设计的,如果亲们有啥别的具体的需求可以酌情更改)。

这里上一下代码:

首先是获取当前时间到今天结束时间所剩余的毫秒数:

/**

* 获取当前时间到今天结束 的毫秒数

*因为这个是工具类里面的方法所以是静态的

* @return

*/

public static long getEndTime() {

//获取当前时间的毫秒数

long time = new java.util.Date().getTime();

//获取到今天结束的毫秒数

Calendar todayEnd = Calendar.getInstance();

todayEnd.set(Calendar.HOUR_OF_DAY, 23); // Calendar.HOUR 12小时制。HOUR_OF_DAY 24小时制

todayEnd.set(Calendar.MINUTE, 59);

todayEnd.set(Calendar.SECOND, 59);

todayEnd.set(Calendar.MILLISECOND, 999);

long endTime = todayEnd.getTimeInMillis();


//这里endTime-time获取的是到23:59:59:999的毫秒数。再加1才是到24点整的毫秒数

return endTime-time+1;

}

然后发送短信接口的代码:

public ResultBean SendSMSCode(String tel) {

if("10".equals(stringRedisTemplate.opsForValue().get(tel))) {

return Tools.result(200, "您的手机号码已达到发送验证码次数上限", null, false);

}

SMSClient client = new SMSClient(masterSecret, appkey);

SMSPayload payload = SMSPayload.newBuilder().setMobileNumber(tel).setTempId(1).build();

try {

//这句代码是真正发送验证码的方法。如果你们用别的平台的接口也应该有一句话是真正发送的代码。

SendSMSResult res =client.sendSMSCode(payload);

if(stringRedisTemplate.opsForValue().get(tel)==null) {

stringRedisTemplate.opsForValue().set(tel, "1", Tools.getEndTime(), TimeUnit.MILLISECONDS);

}else {

String value = stringRedisTemplate.opsForValue().get(tel);

int times = Integer.parseInt(value)+1;

String timesStr = String.valueOf(times);

stringRedisTemplate.opsForValue().set(tel, timesStr, Tools.getEndTime(), TimeUnit.MILLISECONDS);

}

return Tools.result(200, "发送验证码成功", res, true);

} catch (Exception e) {

LOG.info("Error Message: " + e.getMessage());

return Tools.result(500, "发送验证码失败", null, false);

}

}

额,还是大概说一下代码的逻辑吧。首先进入到这个接口就要判断此手机号是否已经发到了10次上限。如果已经发到了则直接返回限制。如果没达到每日上限才往下继续。然后加粗的这几句都是发送短信的代码。平台不一样肯定不是一种写法。就不多说了。然后是等短信发送成功了才操作的。这一点很注意,短信发送成功才算一次次数。然后判断redis中是否有次手机号为key,如果没有则创建一个,值是1,如果有则在原来的基础上+1。没啥复杂的逻辑操作,就是一个思路而已。然后每次过期时间都是根据当前时间来获取的。单位是毫秒。如果业务需求是24小时什么的也可以灵活改动。

感觉代码中也没啥有难度的地方。如果说有看不懂的比如说对redis操作看不懂可以跳转专门讲StringRedisTemplate的文章:

Redis,StringRedisTemplate使用讲解

然后有更好的实现方式或者思路的可以留言或者私聊我~~

全文手打~~这么不容易的写个文~~如果你觉得用到了~留个言点个赞转个发什么的啊~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • 如何影响他人分为三个步骤:四步思考、明确方向、合作技巧。 第一是四步思考: 01 问题:现在的问题是什么? 02 ...
    凤以非阅读 303评论 0 0
  • 田英瑞,平顶山,焦点18期,持续分享991天(20180616,周六)昨晚讲完微课,一闺蜜找我,不知不觉聊到10点...
    向阳花开_田英瑞阅读 234评论 0 3