|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
private boolean checkSendMobile2(String mobile){
int limitCount = 0;
Object obj = UserCacheManager.getValue("SEND_SMS_TYPE",
mobile);
String limitCountKey = mobile+"_limitCount";//每个手机号码就代表是一个用户
if(UserCacheManager.getValue("SEND_SMS_LIMIT_COUNT", limitCountKey)==null){
limitCount = 1;// 记录第一次
}else{
limitCount = (int) UserCacheManager.getValue("SEND_SMS_LIMIT_COUNT", limitCountKey);
}
if (obj instanceof Long) {
long time = (Long) obj;
if(System.currentTimeMillis() - time < 1 * 60 * 1000){
//如果是在一分钟之内 则判断访问次数
limitCount++;
UserCacheManager.put("SEND_SMS_LIMIT_COUNT", limitCountKey, limitCount);
if(limitCount>3){
//如果大于三次 则调用次数过多
return true;
}else{
return false;
}
}else{
//超过一分钟
limitCount = 1;//次数重新赋值1
//同时保存用户访问次数和时间
UserCacheManager.put("SEND_SMS_TYPE", mobile, new Date().getTime());
UserCacheManager.put("SEND_SMS_LIMIT_COUNT", limitCountKey, limitCount);
return false;
}
} else {
//没有保存用户访问时间, 则说明第一次访问
UserCacheManager.put("SEND_SMS_TYPE", mobile, new Date().getTime());
UserCacheManager.put("SEND_SMS_LIMIT_COUNT", limitCountKey, limitCount);
return false;
}
}
|
map<用户,List<时间(long)>>
比如你吧用户信息也传到这个方法里面去,map.get就能找到你最近访问的时间记录了,几点几分第一次,几点几分第二次,
还是按照时间先后顺序排列,都已经这样了。
for(List<时间(long)>){
if(list.get(i)-当前时间<三分钟){
++n;
}
}
if(n>3){
throw ;
}