diff --git a/src/main/java/com/sqx/common/aspect/IpAccessCounter.java b/src/main/java/com/sqx/common/aspect/IpAccessCounter.java index b6d96355..1952d0cf 100644 --- a/src/main/java/com/sqx/common/aspect/IpAccessCounter.java +++ b/src/main/java/com/sqx/common/aspect/IpAccessCounter.java @@ -23,13 +23,46 @@ public class IpAccessCounter { // 十分钟的毫秒数 private static final long TEN_MINUTES = 10 * ONE_MINUTE; - private static AtomicInteger removeCount = new AtomicInteger(0); +// private static AtomicInteger removeCount = new AtomicInteger(0); -// static { -// // 定时任务,每分钟清理一次访问记录 -// ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); -// executor.scheduleAtFixedRate(() -> { + static { + // 定时任务,每分钟清理一次访问记录 + ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); + executor.scheduleAtFixedRate(() -> { + synchronized (IpAccessCounter.class) { + try { + long currentTime = System.currentTimeMillis(); + Set removedIps = new HashSet<>(); + IP_ACCESS_TIMES.forEach((ip, accessTimes) -> { + accessTimes.removeIf(time -> currentTime - time > ONE_MINUTE); + if (accessTimes.isEmpty()) { + removedIps.add(ip); + } + }); + removedIps.forEach(IP_ACCESS_TIMES::remove); + + Set removedBlacklistIps = new HashSet<>(); + BLACKLIST.entrySet().removeIf(entry -> { + boolean shouldRemove = currentTime - entry.getValue() > TEN_MINUTES; + if (shouldRemove) { + removedBlacklistIps.add(entry.getKey()); + } + return shouldRemove; + }); + + log.info("IpAccessCounter 清理完成,移除了 {} 个 IP 的黑名单记录,当前 BLACKLIST 大小: {}, IP_ACCESS_TIMES 大小: {}", + removedBlacklistIps.size(), BLACKLIST.size(), IP_ACCESS_TIMES.size()); + } catch (Exception e) { + log.error("定时任务异常", e); + } + } + }, ONE_MINUTE, 20000, TimeUnit.MINUTES); + } + +// public static void removeOldInfo() { +// synchronized (IpAccessCounter.class) { // try { +// removeCount.set(0); // long currentTime = System.currentTimeMillis(); // Set removedIps = new HashSet<>(); // IP_ACCESS_TIMES.forEach((ip, accessTimes) -> { @@ -54,46 +87,15 @@ public class IpAccessCounter { // } catch (Exception e) { // log.error("定时任务异常", e); // } -// }, ONE_MINUTE, 20000, TimeUnit.MINUTES); +// } // } - public static void removeOldInfo() { - synchronized (IpAccessCounter.class) { - try { - removeCount.set(0); - long currentTime = System.currentTimeMillis(); - Set removedIps = new HashSet<>(); - IP_ACCESS_TIMES.forEach((ip, accessTimes) -> { - accessTimes.removeIf(time -> currentTime - time > ONE_MINUTE); - if (accessTimes.isEmpty()) { - removedIps.add(ip); - } - }); - removedIps.forEach(IP_ACCESS_TIMES::remove); - - Set removedBlacklistIps = new HashSet<>(); - BLACKLIST.entrySet().removeIf(entry -> { - boolean shouldRemove = currentTime - entry.getValue() > TEN_MINUTES; - if (shouldRemove) { - removedBlacklistIps.add(entry.getKey()); - } - return shouldRemove; - }); - - log.info("IpAccessCounter 清理完成,移除了 {} 个 IP 的黑名单记录,当前 BLACKLIST 大小: {}, IP_ACCESS_TIMES 大小: {}", - removedBlacklistIps.size(), BLACKLIST.size(), IP_ACCESS_TIMES.size()); - } catch (Exception e) { - log.error("定时任务异常", e); - } - } - } - // 检查 IP 是否可以访问 public static boolean canAccess(String ip, Integer maxAccessCount) { - removeCount.getAndIncrement(); - if (removeCount.get() > 400) { - removeOldInfo(); - } +// removeCount.getAndIncrement(); +// if (removeCount.get() > 400) { +// removeOldInfo(); +// } if (isBlacklisted(ip)) { return false; }