diff --git a/src/main/java/com/sqx/common/aspect/IpAccessCounter.java b/src/main/java/com/sqx/common/aspect/IpAccessCounter.java index 1952d0cf..b6d96355 100644 --- a/src/main/java/com/sqx/common/aspect/IpAccessCounter.java +++ b/src/main/java/com/sqx/common/aspect/IpAccessCounter.java @@ -23,46 +23,13 @@ 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(() -> { - 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) { +// static { +// // 定时任务,每分钟清理一次访问记录 +// ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); +// executor.scheduleAtFixedRate(() -> { // try { -// removeCount.set(0); // long currentTime = System.currentTimeMillis(); // Set removedIps = new HashSet<>(); // IP_ACCESS_TIMES.forEach((ip, accessTimes) -> { @@ -87,15 +54,46 @@ 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; }