1. import java.util.HashMap;
  2. import java.util.Map;
  3. import java.util.concurrent.ConcurrentHashMap;
  4. import java.util.concurrent.atomic.AtomicLong;
  5. public class UrlParameterEnvironment {
  6. private final Map<String, Long> requestCounts = new ConcurrentHashMap<>(); // Track request counts per URL parameter
  7. private final Map<String, Long> lastRequestTimes = new ConcurrentHashMap<>(); // Track last request time per URL parameter
  8. private final long rateLimitWindow = 60; // Time window in seconds
  9. private final long maxRequestsPerWindow = 10; // Maximum requests allowed per window
  10. public boolean isAllowed(String parameter) {
  11. long now = System.currentTimeMillis();
  12. long lastRequestTime = lastRequestTimes.getOrDefault(parameter, 0L);
  13. // Check if within the rate limit window
  14. if (now - lastRequestTime < rateLimitWindow * 1000) {
  15. // Request is within the window, check if rate limit exceeded
  16. long requestCount = requestCounts.getOrDefault(parameter, 0L);
  17. if (requestCount >= maxRequestsPerWindow) {
  18. return false; // Rate limit exceeded
  19. }
  20. return true; // Request allowed
  21. } else {
  22. // Request is outside the window, reset the count
  23. requestCounts.remove(parameter);
  24. lastRequestTimes.remove(parameter);
  25. requestCounts.put(parameter, 1L);
  26. lastRequestTimes.put(parameter, now);
  27. return true; // Request allowed
  28. }
  29. }
  30. public void incrementRequestCount(String parameter) {
  31. requestCounts.compute(parameter, (key, count) -> (count == null) ? 1 : count + 1);
  32. }
  33. public long getRateLimitWindow() {
  34. return rateLimitWindow;
  35. }
  36. public long getMaxRequestsPerWindow() {
  37. return maxRequestsPerWindow;
  38. }
  39. }

Add your comment