diff --git a/src/main/java/com/sqx/common/aspect/AppApiMethodAspect.java b/src/main/java/com/sqx/common/aspect/AppApiMethodAspect.java index 575f9970..86fd9780 100644 --- a/src/main/java/com/sqx/common/aspect/AppApiMethodAspect.java +++ b/src/main/java/com/sqx/common/aspect/AppApiMethodAspect.java @@ -54,11 +54,11 @@ public class AppApiMethodAspect { HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); String requestIp = IPUtils.getIpAddr(request); -// Integer maxAccessCount = Integer.parseInt(commonInfoService.findOne(935).getValue()); -// if (!IpAccessCounter.canAccess(requestIp, maxAccessCount)) { -// log.info("IpAccessCounter 一分钟内请求超过限制,IP: {}, 最大访问次数: {}", requestIp, maxAccessCount); -// throw new LimitException("访问频率过高,请稍后再试"); -// } + Integer maxAccessCount = Integer.parseInt(commonInfoService.findOne(935).getValue()); + if (!IpAccessCounter.canAccess(requestIp, maxAccessCount)) { + log.info("IpAccessCounter 一分钟内请求超过限制,IP: {}, 最大访问次数: {}", requestIp, maxAccessCount); + throw new LimitException("访问频率过高,请稍后再试"); + } String params = new Gson().toJson(args); diff --git a/src/main/java/com/sqx/common/aspect/IpAccessCounter.java b/src/main/java/com/sqx/common/aspect/IpAccessCounter.java index 3131bafe..572e8df2 100644 --- a/src/main/java/com/sqx/common/aspect/IpAccessCounter.java +++ b/src/main/java/com/sqx/common/aspect/IpAccessCounter.java @@ -3,6 +3,7 @@ package com.sqx.common.aspect; import lombok.extern.slf4j.Slf4j; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -14,9 +15,9 @@ import java.util.concurrent.atomic.AtomicInteger; @Slf4j public class IpAccessCounter { // 记录 IP 及其每次访问的时间列表 - private static final Map> IP_ACCESS_TIMES = new HashMap<>(); + private static final Map> IP_ACCESS_TIMES = new ConcurrentHashMap<>(); // 黑名单,记录 IP 及其加入黑名单的时间 - private static final Map BLACKLIST = new HashMap<>(); + private static final Map BLACKLIST = new ConcurrentHashMap<>(); // 一分钟的毫秒数 private static final long ONE_MINUTE = 60 * 1000; // 十分钟的毫秒数 @@ -88,7 +89,7 @@ public class IpAccessCounter { // 检查 IP 是否可以访问 public static boolean canAccess(String ip, Integer maxAccessCount) { removeCount.getAndIncrement(); - if (removeCount.get() > 300) { + if (removeCount.get() > 400) { removeOldInfo(); } if (isBlacklisted(ip)) {