精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

不只是限流:在 Spring Boot 內嵌輕量級 API 防火墻,實現單機安全、動態黑名單與在線熱配置

開發 前端
雖然引入 API 網關(如 Kong、Spring Cloud Gateway、Nginx+Lua)可以解決部分問題,但對于中小團隊來說,成本過高,維護復雜。

背景與動機

在后端開發中,很多團隊都會遇到以下問題:

  • 接口被惡意調用:某些敏感接口(訂單查詢、報表導出)被高頻請求,數據庫連接耗盡,導致服務雪崩。
  • 缺乏差異化防護:全局限流無法針對關鍵接口單獨保護。
  • 規則更新不靈活:規則寫死在代碼中,每次修改都要重啟應用。
  • 黑白名單分散:部分在 Nginx,部分在數據庫,缺乏統一管理。

雖然引入 API 網關(如 Kong、Spring Cloud Gateway、Nginx+Lua)可以解決部分問題,但對于中小團隊來說,成本過高,維護復雜。

因此,我們提出一種 內嵌在 Spring Boot 的輕量級 API 防火墻,支持:

  • 黑白名單
  • 限流與風控規則
  • 動態黑名單(自動封禁惡意 IP)
  • 在線管理(前端控制臺)

系統設計

功能清單

  1. 黑白名單
  • 靜態配置(手動添加)
  • 動態黑名單(違規 IP 自動封禁,支持 TTL 過期自動解封)
  1. 限流與風控
  • QPS 限流
  • 時間窗限流
  • 單用戶限制
  1. 在線管理
  • 規則管理
  • 黑名單管理(手動 + 動態)
  • 日志查看

核心實現

以下為關鍵模塊,包路徑統一采用 Linux 風格,前綴為 com.icoderoad

動態黑名單實體

package com.icoderoad.firewall.model;


@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DynamicBlacklistEntry {
    private String ip;
    private LocalDateTime blockedAt;
    private LocalDateTime expireAt;


    public boolean isExpired() {
        return LocalDateTime.now().isAfter(expireAt);
    }
}

RuleManager 擴展

package com.icoderoad.firewall.core;


@Slf4j
@Service
public class RuleManager {


    private final Map<String, FirewallRule> ruleCache = new ConcurrentHashMap<>();
    private final Map<String, FirewallBlacklist> blacklistCache = new ConcurrentHashMap<>();
    private final Map<String, FirewallWhitelist> whitelistCache = new ConcurrentHashMap<>();
    private final Map<String, DynamicBlacklistEntry> dynamicBlacklist = new ConcurrentHashMap<>();


    // 添加到動態黑名單
    public void blockIp(String ip, int minutes) {
        DynamicBlacklistEntry entry = new DynamicBlacklistEntry(
                ip,
                LocalDateTime.now(),
                LocalDateTime.now().plusMinutes(minutes)
        );
        dynamicBlacklist.put(ip, entry);
        log.warn("IP {} 已被動態拉黑 {} 分鐘", ip, minutes);
    }


    // 檢查是否在黑名單
    public boolean isBlacklisted(String ip) {
        if (blacklistCache.containsKey(ip)) return true;
        DynamicBlacklistEntry entry = dynamicBlacklist.get(ip);
        if (entry == null) return false;
        if (entry.isExpired()) {
            dynamicBlacklist.remove(ip);
            return false;
        }
        return true;
    }


    // 管理接口調用
    public List<DynamicBlacklistEntry> getDynamicBlacklist() {
        return new ArrayList<>(dynamicBlacklist.values());
    }


    public void removeDynamicBlacklist(String ip) {
        dynamicBlacklist.remove(ip);
    }
}

攔截器擴展

package com.icoderoad.firewall.interceptor;


@Slf4j
@Component
public class FirewallInterceptor implements HandlerInterceptor {


    @Autowired
    private RuleManager ruleManager;


    private final Cache<String, AtomicInteger> qpsCache = CacheBuilder.newBuilder()
            .expireAfterWrite(1, TimeUnit.MINUTES)
            .build();


    private final Cache<String, AtomicInteger> userCache = CacheBuilder.newBuilder()
            .expireAfterWrite(1, TimeUnit.HOURS)
            .build();


    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
        String ip = getClientIp(req);
        String path = req.getRequestURI();


        if (ruleManager.isWhitelisted(ip)) return true;
        if (ruleManager.isBlacklisted(ip)) {
            resp.sendError(403, "IP已被封禁");
            return false;
        }


        FirewallRule rule = ruleManager.getMatchingRule(path);


        if (!checkQps(ip, path, rule)) {
            ruleManager.blockIp(ip, 5); // 動態拉黑5分鐘
            resp.sendError(429, "訪問過于頻繁,已被臨時封禁");
            return false;
        }
        if (!checkUser(ip, rule)) {
            ruleManager.blockIp(ip, 10); // 動態拉黑10分鐘
            resp.sendError(429, "請求次數超限,已被臨時封禁");
            return false;
        }
        return true;
    }
}

管理接口擴展

package com.icoderoad.firewall.controller;


@Slf4j
@RestController
@RequestMapping("/api/firewall")
public class FirewallController {


    @Autowired
    private RuleManager ruleManager;


    @GetMapping("/dynamic-blacklist")
    public List<DynamicBlacklistEntry> getDynamicBlacklist() {
        return ruleManager.getDynamicBlacklist();
    }


    @DeleteMapping("/dynamic-blacklist/{ip}")
    public ResponseEntity<?> removeFromDynamicBlacklist(@PathVariable String ip) {
        ruleManager.removeDynamicBlacklist(ip);
        return ResponseEntity.ok("已移除動態黑名單:" + ip);
    }
}

前端管理控制臺

完整的前端代碼,使用 Tailwind CSS + Vanilla JS,支持:

  • 查看規則
  • 新增/刪除規則
  • 查看黑名單(靜態 + 動態)
  • 手動移除動態黑名單
  • 日志輸出
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>API 防火墻控制臺</title>
  <script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-50">
  <div class="p-6">
    <h1 class="text-2xl font-bold mb-6">API 防火墻管理</h1>


    <!-- 動態黑名單 -->
    <div class="mb-8">
      <h2 class="text-xl font-semibold mb-2">動態黑名單</h2>
      <table class="min-w-full bg-white shadow rounded">
        <thead>
          <tr class="bg-gray-100">
            <th class="px-4 py-2">IP</th>
            <th class="px-4 py-2">封禁時間</th>
            <th class="px-4 py-2">過期時間</th>
            <th class="px-4 py-2">操作</th>
          </tr>
        </thead>
        <tbody id="dynamicBlacklistTable"></tbody>
      </table>
    </div>


    <!-- 防火墻規則 -->
    <div>
      <h2 class="text-xl font-semibold mb-2">規則管理</h2>
      <table class="min-w-full bg-white shadow rounded">
        <thead>
          <tr class="bg-gray-100">
            <th class="px-4 py-2">規則名</th>
            <th class="px-4 py-2">API Pattern</th>
            <th class="px-4 py-2">QPS限制</th>
            <th class="px-4 py-2">狀態</th>
          </tr>
        </thead>
        <tbody id="rulesTable"></tbody>
      </table>
    </div>
  </div>


  <script>
    async function loadDynamicBlacklist() {
      const resp = await fetch('/api/firewall/dynamic-blacklist');
      const list = await resp.json();
      const tbody = document.getElementById('dynamicBlacklistTable');
      tbody.innerHTML = '';
      list.forEach(item => {
        const tr = document.createElement('tr');
        tr.innerHTML = `
          <td class="border px-4 py-2">${item.ip}</td>
          <td class="border px-4 py-2">${item.blockedAt}</td>
          <td class="border px-4 py-2">${item.expireAt}</td>
          <td class="border px-4 py-2">
            <button class="bg-red-500 text-white px-2 py-1 rounded" onclick="removeBlacklist('${item.ip}')">移除</button>
          </td>
        `;
        tbody.appendChild(tr);
      });
    }


    async function removeBlacklist(ip) {
      await fetch('/api/firewall/dynamic-blacklist/' + ip, { method: 'DELETE' });
      loadDynamicBlacklist();
    }


    async function loadRules() {
      const resp = await fetch('/api/firewall/rules');
      const list = await resp.json();
      const tbody = document.getElementById('rulesTable');
      tbody.innerHTML = '';
      list.forEach(rule => {
        const tr = document.createElement('tr');
        tr.innerHTML = `
          <td class="border px-4 py-2">${rule.ruleName}</td>
          <td class="border px-4 py-2">${rule.apiPattern}</td>
          <td class="border px-4 py-2">${rule.qpsLimit || '-'}</td>
          <td class="border px-4 py-2">${rule.enabled ? '啟用' : '禁用'}</td>
        `;
        tbody.appendChild(tr);
      });
    }


    loadDynamicBlacklist();
    loadRules();
  </script>
</body>
</html>

總結

這套方案在 Spring Boot 內嵌 API 防火墻 的基礎上,實現了 動態黑名單功能

  • 當 IP 請求頻繁觸發限流或違規時,會被自動拉黑一段時間
  • 黑名單可在管理頁面中查看,并支持手動解封
  • 黑名單 TTL 到期后自動解封,避免誤傷正常用戶

整體方案具備:

  • 低成本:無需外部網關,內嵌即可運行
  • 在線熱更新:規則和黑名單實時生效
  • 風控增強:動態黑名單機制讓防護更智能
  • 可擴展:未來可升級為分布式 Redis 版本
責任編輯:武曉燕 來源: 路條編程
相關推薦

2025-03-18 14:33:14

2025-07-09 07:36:22

Spring系統設計限流

2017-03-25 21:13:38

JavaScript排序

2015-02-04 09:45:40

2013-04-25 13:58:15

編程

2011-06-02 10:52:11

Android BroadCast 黑名單

2009-12-25 12:21:56

2011-01-21 17:53:44

Zimbra

2010-05-24 13:36:11

2021-11-05 11:17:45

互聯網996大廠

2024-11-26 11:02:17

2010-08-05 09:29:08

jQuery

2011-01-05 09:19:59

防火墻firewalld

2018-03-13 15:00:22

智慧交通高鐵無人駕駛

2011-09-15 13:25:02

2011-11-17 13:25:43

垃圾郵件

2015-11-24 10:05:07

私有云虛擬化負載遷移

2022-09-20 16:38:08

數據安全數據泄露安全

2014-07-23 10:39:03

2025-04-17 02:00:00

數據分析SQL大數據
點贊
收藏

51CTO技術棧公眾號

日韩偷拍一区二区| 欧美专区中文字幕| 国产女主播在线播放| free性欧美16hd| 久久精品人人做人人爽97 | bestiality新另类大全| 国产精品自拍一区| 欧美制服第一页| 性色国产成人久久久精品| 亚洲日本va| 色综合天天综合网国产成人综合天| 四虎永久国产精品| 国精产品一品二品国精品69xx | 精品不卡一区| 日韩一级精品视频在线观看| 91黄色小网站| av片哪里在线观看| 26uuu久久综合| 亚洲一区国产精品| 精品国产午夜福利| 欧美激情 亚洲a∨综合| 夜夜嗨av色综合久久久综合网| 91丨porny丨九色| 极品美女一区| 亚洲综合999| 正在播放精油久久| 你懂的在线播放| 成人免费毛片a| 91九色单男在线观看| 国产美女激情视频| 国产精品激情电影| 日韩亚洲一区二区| 精品成人av一区二区三区| 99这里只有精品视频| 欧美日韩国产另类一区| 久久久久久久久久久久久国产精品| 国产精品一卡二卡三卡| 欧美国产激情一区二区三区蜜月| 国产日韩欧美二区| 国产日韩欧美视频在线观看| 三级亚洲高清视频| 欧美一级片一区| 久久精品国产亚洲av香蕉| 91精品啪在线观看国产18| 中文字幕av一区中文字幕天堂| 精品国产av色一区二区深夜久久| 亚洲国产91视频| 色视频成人在线观看免| 欧美 日韩 国产在线观看| 欧美人体视频xxxxx| 中文字幕一区二区三区在线不卡| 天堂资源在线亚洲资源| 男女网站在线观看| 久久一夜天堂av一区二区三区| 国产精品久久久久久久免费大片 | 日韩三级在线播放| 男人天堂综合| 日本一区二区三区久久久久久久久不| 欧美lavv| 经典三级在线| 中文字幕免费不卡在线| 日韩中文字幕一区| a中文在线播放| 国产午夜精品理论片a级大结局| 久久av一区二区| 日本免费一区二区三区最新| 91亚洲精品乱码久久久久久蜜桃| 久久99精品久久久久久青青日本 | 天堂av一区| 日韩欧美三级在线| 国产伦精品一区二区三区88av| 一区二区三区在线免费看| 精品少妇一区二区三区日产乱码| 丰满熟女人妻一区二区三区| 欧美日韩麻豆| 国产一区二区三区高清在线观看| 又色又爽的视频| 亚洲女同另类| 欧美精品激情视频| 欧美另类一区二区| 日韩成人精品在线| 91免费人成网站在线观看18| 国产 欧美 精品| 久久综合色鬼综合色| 日韩videos| 国产一区久久精品| 五月天欧美精品| 熟女少妇精品一区二区| 99re久久| 精品少妇一区二区三区在线视频| 99久久国产精| 99re6这里只有精品| 欧美丰满少妇xxxxx做受| 国产视频91在线| 久久福利资源站| 国产精品xxxx| 高清国产福利在线观看| 亚洲日本丝袜连裤袜办公室| 免费看欧美黑人毛片| 亚洲高清黄色| 欧美va亚洲va在线观看蝴蝶网| 免费污网站在线观看| 2023国产精品久久久精品双| 69久久夜色精品国产69乱青草| www.久久视频| 成人精品视频一区二区三区尤物| 日本不卡免费新一二三区| 国产网站在线免费观看| 色先锋久久av资源部| 青娱乐国产精品视频| 国产午夜一区| 欧美风情在线观看| 亚洲一级视频在线观看| 97se亚洲国产综合自在线| 潘金莲一级淫片aaaaa免费看| 夜鲁夜鲁夜鲁视频在线播放| 欧美一区二区精美| av男人的天堂av| 亚洲国产婷婷| 亚洲精品欧美日韩专区| 风间由美一区| 激情懂色av一区av二区av| 韩国一区二区在线播放| 国产精品中文字幕亚洲欧美| 国内精品久久久久伊人av| 国产精品久久婷婷| 久久久www免费人成精品| 日韩精品视频在线观看视频| japansex久久高清精品| 亚洲性夜色噜噜噜7777| 日韩免费av片| 国产精品77777| 色婷婷精品国产一区二区三区| www.youjizz.com在线| 欧美大片在线观看| 欧美第一页在线观看| 免费av成人在线| 日本精品一区二区三区高清 久久| av手机免费在线观看| 欧美一区二区观看视频| 成年人视频软件| 日韩高清在线观看| 老牛影视免费一区二区| 午夜裸体女人视频网站在线观看| 亚洲高清一区二| 国产无套粉嫩白浆内谢| 国产精品 日产精品 欧美精品| 资源网第一页久久久| 久久亚洲资源中文字| 日韩在线观看免费| 在线免费观看日韩视频| 中文字幕第一区| 欧美成人福利在线观看| 国产精品成人a在线观看| 国产日韩欧美中文| 免费大片在线观看www| 欧美高清精品3d| www.超碰在线观看| 国产91对白在线观看九色| 日本男女交配视频| 女一区二区三区| 日av在线播放中文不卡| 触手亚洲一区二区三区| 欧美在线短视频| 中文字幕无码日韩专区免费 | 亚洲影视一区| 5g国产欧美日韩视频| 日本aa在线| 亚洲精品mp4| 亚洲综合成人av| 最新不卡av在线| 动漫av在线免费观看| 亚洲美女网站| 日韩尤物视频| 国产日韩在线观看视频| 久久久久久久久久av| 三级黄视频在线观看| 欧美系列在线观看| www.av成人| 99久久精品国产毛片| 一道本视频在线观看| 一区二区电影| 久久精品中文字幕一区二区三区| 高清成人在线| 欧美国产中文字幕| 欧美日韩伦理片| 7777精品伊人久久久大香线蕉最新版| 免费网站看av| 国产亚洲一区二区在线观看| 中文字幕亚洲影院| 99视频+国产日韩欧美| 日韩欧美亚洲在线| 日韩在线视频一区二区三区| 奇门遁甲1982国语版免费观看高清| 69久久精品| 亚洲高清av在线| 91一区二区视频| 精品久久久久久久久久久久久| 婷婷综合在线视频| caoporn国产一区二区| 91女神在线观看| 亚洲免费播放| 9191国产视频| re久久精品视频| 国产嫩草一区二区三区在线观看| 91精品国产66| 91高潮精品免费porn| av观看在线| 国产亚洲精品一区二555| 亚洲国产精品无码久久| 欧美亚洲自拍偷拍| 日韩成人免费观看| 亚洲精品第1页| 黄色av免费播放| 91在线精品一区二区| 在线观看免费看片| 久久91精品久久久久久秒播| 欧美在线观看www| 欧美日韩伊人| 女女同性女同一区二区三区按摩| 国产欧美久久一区二区三区| 国产精品欧美久久| 欧美日韩黄网站| 国产精品美女久久久久av超清| 黄毛片在线观看| 欧美日本黄视频| 黄色一级片在线观看| 国产一区二区三区在线看| 色欲av永久无码精品无码蜜桃| 制服.丝袜.亚洲.另类.中文| 中日韩在线观看视频| 欧美性生活大片免费观看网址| 欧美亚洲天堂网| 樱桃国产成人精品视频| 国产色无码精品视频国产| 国产欧美精品一区aⅴ影院 | 欧美中文字幕在线视频| a'aaa级片在线观看| 欧美精品在线观看| 福利视频在线| 欧美精品在线免费观看| 菠萝蜜视频国产在线播放| 神马国产精品影院av| 99免在线观看免费视频高清| 亚洲天堂色网站| 国产高清视频在线观看| 伊人av综合网| yw193.com尤物在线| 亚洲深夜福利视频| 黄色av网站在线| 亚洲日韩欧美视频| 成人p站proumb入口| 国产亚洲欧洲黄色| 在线免费看黄| 久久视频在线直播| 18在线观看的| 久久久久久高潮国产精品视| 国产美女精品写真福利视频| 2019av中文字幕| 成人自拍av| 国产一区欧美二区三区| 伊人久久综合网另类网站| 亚洲va欧美va国产综合久久| 视频一区日韩精品| 韩国成人av| 国产一区不卡| 亚洲成年人专区| 欧美另类综合| 日韩精品一区二区三区久久| 日日摸夜夜添夜夜添国产精品| 中文字幕天天干| 激情国产一区二区| 日批视频免费看| 久久综合九色欧美综合狠狠| 阿v天堂2014| 悠悠色在线精品| 亚洲婷婷综合网| 欧美日韩免费不卡视频一区二区三区| av中文字幕免费| 精品人伦一区二区色婷婷| 天天插天天干天天操| 一区二区亚洲精品国产| 中文av资源在线| 欧洲日韩成人av| 精品视频91| 精品综合在线| 久久久久久久久久久9不雅视频| 激情小视频网站| 日本在线不卡视频一二三区| 亚洲丝袜在线观看| 久久人人爽人人爽| 欧美日韩黄色网| 色综合天天性综合| 91国内精品视频| 亚洲精品99久久久久| 日韩欧美小视频| 6080yy精品一区二区三区| 成人全视频在线观看在线播放高清| 97国产超碰| 精品国产网站| 欧美激情视频免费看| 久久国产精品99精品国产| 日韩av无码一区二区三区不卡| 国产精品丝袜91| 日韩少妇裸体做爰视频| 91.成人天堂一区| 牛牛澡牛牛爽一区二区| 欧美精品久久久久久久| 韩国理伦片久久电影网| 精品国产一区二区三区日日嗨 | 久久综合久久美利坚合众国| 东京一区二区| 国产在线精品日韩| 久久久久久影院| 好男人www社区| 99精品久久久久久| 青青草激情视频| 欧美日韩久久一区| 可以免费看污视频的网站在线| 欧美激情a在线| 成人豆花视频| 亚洲一区二区精品在线| 老牛国产精品一区的观看方式| 国产在线观看免费播放| 国产精品免费aⅴ片在线观看| 久久一区二区三区视频| 精品免费日韩av| av大大超碰在线| 91牛牛免费视频| 天天操综合网| 欧美午夜aaaaaa免费视频| 久久久亚洲精品石原莉奈| 日韩毛片在线视频| 亚洲国产成人精品久久| 免费在线国产视频| 亚洲一区二区三区xxx视频| 久久性感美女视频| the porn av| 中文字幕欧美日韩一区| 精品久久久久久久久久久久久久久久久久| 亚洲国产精品电影| free性欧美| 精品视频导航| 亚洲在线网站| 色婷婷av777| 一本久久综合亚洲鲁鲁五月天 | 97人妻精品一区二区三区视频 | 欧美hdxxxxx| 97av自拍| 国内在线观看一区二区三区| 亚洲熟女一区二区三区| 亚洲一区在线电影| 亚洲精品国偷拍自产在线观看蜜桃| 久精品免费视频| 国产成人精品亚洲线观看| 很污的网站在线观看| 成人18精品视频| 亚洲免费在线视频观看| 亚洲男人7777| 九九久久国产| 黑人巨大国产9丨视频| 高清shemale亚洲人妖| 国产成人无码一区二区三区在线| 亚洲国产另类 国产精品国产免费| 98色花堂精品视频在线观看| 精品一区久久| 免费在线观看日韩欧美| 青花影视在线观看免费高清| 日韩欧美成人午夜| 国产精品一二三产区| 秋霞久久久久久一区二区| 美腿丝袜亚洲色图| 日本午夜在线观看| 精品久久人人做人人爱| 亚洲风情在线资源| 亚洲精品自在在线观看| 国产成人精品一区二区三区四区| 亚欧洲精品在线视频| 亚洲午夜精品久久久久久久久久久久| 日韩美香港a一级毛片| 女人帮男人橹视频播放| 久久久久久日产精品| 国产裸体永久免费无遮挡| 久久久久久久久久久免费| 中文字幕精品影院| 在线观看国产一级片| 亚洲一区二区三区四区在线观看 | 日本中文字幕不卡免费| 91影院成人| 国产精品九九视频| 欧美日韩一级片网站| 高h视频在线播放| 视频一区视频二区视频三区高| 国产一二精品视频| 91丝袜一区二区三区| 精品国偷自产在线视频| 日韩aaa久久蜜桃av| 久久久久久久久久久久久久久国产| 亚洲成av人片在线观看无码| 永久免费av在线|