Skip to content

Commit 8aaec76

Browse files
author
Matheus Vieira
committed
add block request after exceed limit
1 parent 27fc625 commit 8aaec76

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/main/java/utils/RateLimit.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ public class RateLimit {
1111

1212
private static final int MAX_REQUESTS = 3;
1313
private static final int INTERVAL = 1 * 60 * 1000; // 6000 ms || 1 min
14+
private static final int BLOCKED_TIME = 2 * 60 * 1000; //1200 ms || 2min
1415

1516
private Map<String, ArrayList<Calendar>> requestsList;
17+
private Map<String, Calendar> blockedList;
1618

1719
public RateLimit() {
1820
requestsList = new ConcurrentHashMap<String, ArrayList<Calendar>>();
21+
blockedList = new ConcurrentHashMap<String, Calendar>();
1922
}
2023

2124
public boolean doFilter(HttpServletRequest request) {
@@ -24,6 +27,10 @@ public boolean doFilter(HttpServletRequest request) {
2427
Calendar currentTime = this.getCurrentTime();
2528

2629
if (requestsList.containsKey(sessionId)) {
30+
if (isInBlockedList(sessionId)) {
31+
return false;
32+
}
33+
2734
if (isAnExceedingRequest(sessionId)) {
2835
return false;
2936
}
@@ -62,9 +69,28 @@ public Boolean isAnExceedingRequest(String sessionId) {
6269
}
6370

6471
if (countRequestLessThanOneMinute == MAX_REQUESTS) {
72+
blockedList.put(sessionId, currentTime);
73+
74+
return true;
75+
}
76+
77+
return false;
78+
}
79+
80+
public Boolean isInBlockedList(String sessionId) {
81+
Calendar currentTime = getCurrentTime();
82+
Calendar blockTime = blockedList.get(sessionId);
83+
84+
if (blockTime == null) {
85+
return false;
86+
}
87+
88+
if ((currentTime.getTimeInMillis() - blockTime.getTimeInMillis()) < BLOCKED_TIME) {
6589
return true;
6690
}
6791

92+
blockedList.remove(sessionId);
93+
6894
return false;
6995
}
7096

0 commit comments

Comments
 (0)