成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

太強了!SpringBoot 3 接口防刷的八種高效解決方案,你用對了嗎?

開發 前端
在當今互聯網應用場景中,接口被惡意刷流量或攻擊已成常態。尤其是在注冊、登錄、領取優惠券、秒殺搶購等核心接口上,如果缺乏有效的限流或防刷機制,輕則資源耗盡,重則服務宕機、數據泄露,后果不堪設想!

在當今互聯網應用場景中,接口被惡意刷流量或攻擊已成常態。尤其是在注冊、登錄、領取優惠券、秒殺搶購等核心接口上,如果缺乏有效的限流或防刷機制,輕則資源耗盡,重則服務宕機、數據泄露,后果不堪設想!

本文將帶你深入理解 SpringBoot 3 中 接口防刷的 8 大實戰解決方案,助你輕松構建穩定、安全的微服務系統。

1. Nginx 級別限流(推薦作為第一道防線)

Nginx 限流模塊(ngx_http_limit_req_module)可基于 IP 等維度進行請求限流,適用于靜態資源、防止惡意爬蟲。

配置示例:

http {
  limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

  server {
    location /api/ {
      limit_req zone=one burst=5 nodelay;
    }
  }
}
  • rate=10r/s限速為每秒 10 次
  • burst=5允許突發請求數為 5 個
  • nodelay立即處理突發請求,不排隊

優點: 性能高、配置簡單缺點: 粒度粗,不適用于用戶維度

2. 基于攔截器+Redis 實現接口限流

核心思想:

通過 HandlerInterceptor 攔截請求,結合 Redis 計數器判斷當前 IP/用戶是否超過訪問頻率。

步驟:

  • 自定義注解 @AccessLimit 配置時間窗口、最大次數
  • 攔截器讀取注解值,根據 key 計數
  • 超出限制則返回錯誤
@AccessLimit(seconds = 60, maxCount = 10)
@GetMapping("/api/limit")
public String limitTest() {
    return "請求成功";
}
String key = "access:" + ip + ":" + uri;
Long count = redisTemplate.opsForValue().increment(key);

優點: 靈活控制訪問頻率,可擴展維度(IP、用戶)缺點: 依賴 Redis,侵入代碼

3. Google Guava + 本地緩存限流

使用 Guava 提供的 RateLimiter(令牌桶算法)快速實現限流,適合 單機應用場景。

RateLimiter rateLimiter = RateLimiter.create(5.0); // 每秒生成 5 個令牌

if (rateLimiter.tryAcquire()) {
    // 允許訪問
} else {
    // 拒絕訪問
}

優點: 無需依賴第三方服務缺點: 無法集群共享數據

4. Sentinel 接口防刷利器(推薦)

阿里開源的 Sentinel 是一個功能強大且靈活的限流熔斷組件,支持控制臺可視化配置、動態擴展和多種限流策略。

? 常見限流維度:

  • QPS(每秒請求數)限流
  • 并發線程數限流
  • 熱點參數限流(針對熱門資源限流)
  • 關聯限流(資源間依賴控制)
  • 鏈路限流(不同入口資源獨立統計)

引入依賴:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-annotation-aspectj</artifactId>
</dependency>

控制臺部署(推薦配置持久化)

下載控制臺 jar:

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -jar sentinel-dashboard.jar

注解式限流使用:

@SentinelResource(value = "hello", blockHandler = "handleBlock")
@GetMapping("/hello")
public String hello() {
    return "Hello Sentinel";
}


public String handleBlock(BlockException ex) {
    return "被限流了!";
}

編程式限流:

try (Entry entry = SphU.entry("order-service")) {
    // 業務邏輯
} catch (BlockException ex) {
    // 限流處理邏輯
}

高級玩法:

  • 配合 Nacos 實現規則持久化
  • 自定義資源路徑解析器,按用戶或 IP 限流
WebCallbackManager.setUrlCleaner(url -> {
    // 統一 URL 資源名,避免 path 變量被當成不同資源
    return url.replaceAll("/user/\\d+", "/user/*");
});

優點: 功能強大、集成簡單、支持動態化缺點: 依賴 Sentinel 控制臺,需配置持久化規則

 5. 驗證碼攔截(強驗證方式防刷)

驗證碼機制適用于注冊/登錄等關鍵接口,阻止自動腳本攻擊。

Easy-Captcha 使用示例:

添加依賴:

<dependency>
  <groupId>com.github.whvcse</groupId>
  <artifactId>easy-captcha</artifactId>
  <version>1.6.2</version>
</dependency>

生成驗證碼:

@GetMapping("/captcha")
public void getCaptcha(HttpServletRequest request, HttpServletResponse response) throws IOException {
    ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(150, 40, 4, 4);
    String text = captcha.getCode();


    String captchaId = UUID.randomUUID().toString();
    redisTemplate.opsForValue().set("captcha:" + captchaId, text, 5, TimeUnit.MINUTES);


    Cookie cookie = new Cookie("captchaId", captchaId);
    response.addCookie(cookie);
    response.setContentType("image/png");
    captcha.write(response.getOutputStream());
}

登錄時驗證:

@PostMapping("/login")
public String login(@RequestParam String code, @CookieValue("captchaId") String captchaId) {
    String redisCode = redisTemplate.opsForValue().get("captcha:" + captchaId);
    if (!code.equalsIgnoreCase(redisCode)) {
        throw new RuntimeException("驗證碼錯誤");
    }
    // 登錄邏輯
}

優點: 防止腳本攻擊,兼容用戶行為分析缺點: 用戶體驗稍差,不適合頻繁調用接口

6. 接入滑塊驗證碼/行為驗證碼(如騰訊滑塊)

用于注冊、投票等關鍵行為,需 JS SDK 支持,推薦服務:

  • 極驗(geetest)
  • 騰訊云驗證碼(支持行為識別)

7. IP 白名單攔截機制

適用于對內系統、支付回調接口等,防止非授權來源訪問。

示例:

List<String> whiteIps = Arrays.asList("127.0.0.1", "192.168.1.1");


if (!whiteIps.contains(request.getRemoteAddr())) {
    response.setStatus(403);
    response.getWriter().write("非法訪問");
}

8. 用戶行為分析+風控(智能防刷)

適用于大中型系統,配合日志采集系統(如 ELK)+ 用戶行為畫像 + 可疑行為預警。

  • 異常行為:頻繁點擊、訪問路徑異常、接口秒級訪問
  • 數據支撐:埋點日志分析 + 機器學習模型判斷

常見方案:

  • 接入 OpenTelemetry / Skywalking 做鏈路追蹤
  • 建立行為模型識別“異常訪問軌跡”

總結對比表:

方案

優點

缺點

適用場景

Nginx限流

性能高,防護前置

粒度粗,用戶維度不可控

靜態資源、統一入口

Redis+注解限流

靈活,適配復雜場景

侵入代碼,復雜度高

登錄/操作類接口

Guava限流

輕量無依賴

單機不可集群共享

單體系統限流

Sentinel限流

支持控制臺、維度豐富

需額外部署 Sentinel 控制臺

微服務系統

圖形驗證碼

防止腳本攻擊

用戶體驗一般

注冊/登錄

滑塊驗證碼

智能行為識別

接入復雜,成本高

高安全場景

IP白名單

簡潔、安全

無法動態擴展

內部系統/回調接口

行為分析+風控

精準識別,動態防御

實現復雜,依賴大數據系統

電商/金融/大型平臺

結論:

接口防刷并非“一勞永逸”,而是一個組合拳策略。應根據接口類型、業務場景、系統架構來靈活選擇:

  • 靜態資源或統一入口 ?? Nginx 限流
  • 核心接口 ?? Sentinel + 驗證碼/行為驗證
  • 數據支撐 ?? 接入日志分析、構建風控體系

?? 安全第一,架構護航,讓你的接口再也不怕被刷!

責任編輯:武曉燕 來源: 路條編程
相關推薦

2025-06-09 01:22:00

2025-01-22 14:02:35

2024-12-02 14:30:20

2024-09-26 14:27:14

2024-12-17 15:00:00

字符串Java

2025-03-26 08:28:36

2011-03-07 14:29:18

2024-06-12 12:13:48

2023-10-17 08:55:08

數據庫數據業務

2024-09-18 10:08:37

2022-05-09 07:27:50

ThreadLocaJava

2016-03-13 17:58:57

2024-03-26 12:08:53

分布式事務存儲

2025-06-25 02:00:00

2022-01-12 18:35:54

MongoDB數據查詢

2010-08-31 16:23:46

SAS數據庫

2025-02-24 16:00:00

SpringBoot定時任務開發

2023-10-30 09:46:08

接口重試技巧

2017-11-09 13:56:46

數據庫MongoDB水平擴展
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本久久精品 | 国产国拍亚洲精品av | 国产精品美女久久久av超清 | 日韩精品久久久 | 在线观看成年人视频 | 亚洲一区二区在线视频 | 日本高清视频在线播放 | 男人的天堂久久 | 国产一区二区电影 | 日韩一级在线 | 99视频免费在线观看 | 99精品欧美一区二区蜜桃免费 | 日本成人午夜影院 | 亚洲精品电影网在线观看 | 欧美一级在线观看 | 久久99精品久久久久久狂牛 | 亚洲一区亚洲二区 | 亚洲福利网站 | 精品免费在线 | 亚洲精品一区二三区不卡 | www.成人免费视频 | 性欧美hd| 国产精品视频一区二区三区 | 在线观看国产h | 亚洲一区二区免费看 | 国产精品久久久久一区二区 | 手机三级电影 | 欧美白人做受xxxx视频 | 天堂在线一区 | 91在线视频免费观看 | 992tv人人草| 国产精品视频一区二区三区 | 国产一级黄色网 | 在线观看中文字幕dvd播放 | 一级毛片色一级 | 精品综合网 | 五月天国产在线 | 国产精品一区二区三区久久久 | 一区二区三区国产在线观看 | 91免费视频 | 免费在线观看黄网站 |