国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Ip-Limit: 輕量級注解式IP限流組件(一)

這篇具有很好參考價值的文章主要介紹了Ip-Limit: 輕量級注解式IP限流組件(一)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

author: van , ggfanwentao@gmail.com

Ip-Limit: 輕量級注解式IP限流組件

項目簡介

基于JVM緩存的輕量級、注解式IP限流組件,方便項目快速引用,滿足多線程場景。
默認為滑動窗口限流器,內(nèi)置令牌桶限流器,可通過注解的屬性配置修改
項目Github地址: https://github.com/DDAaTao/ip-limiter
項目Gitee地址:https://gitee.com/fanwentaomayun/ip-limiter

使用樣例

包含較為詳細的演示使用代碼

樣例項目地址: https://github.com/DDAaTao/ip-limiter-example

Ip-Limit 具有以下特性:

  • 基于注解使用,簡單快捷,可添加到Controller類上,也可以添加到具體的API方法上
  • 業(yè)務入侵小,不用過多配置類,但可以支持多種場景配置
  • 實現(xiàn)組級別統(tǒng)一限流,即可滿足單接口單組場景,又可滿足多接口單組
  • 支持配置文件配置、外部動態(tài)配置(新增、刪除)黑白名單
# 配置文件中配置,需要注意分隔符為半角的','
my.white.ip.list=172.16.50.21,172.16.50.22,172.16.50.23
// 代碼中使用時
@IpLimit(limitType = LimitType.WHITE_LIST, whiteList = "${my.white.ip.list}")
// 或
@IpLimit(limitType = LimitType.WHITE_LIST, whiteList = {"${my.white.ip.list}","172.16.50.35"})
  • 黑白名單IP規(guī)則實現(xiàn)多種模糊模式配置,支持IPv6
    • 172.*.*.1
    • 172.*.1
    • 172.*
    • *.21
    • *

核心限流模式 - LimitType類

  • DEFAULT - 走默認限流策略,不考慮黑白名單參數(shù)
  • WHITE_LIST - 只考慮白名單策略,非白名單的請求全部回絕
  • BLACK_LIST - 只考慮黑名單策略,非黑名單請求不做限流措施
  • DEFAULT_WITH_WHITE_LIST - 在默認限流策略的基礎(chǔ)上,白名單內(nèi)的IP不做限流
  • DEFAULT_WITH_BLACK_LIST - 在默認限流策略的基礎(chǔ)上,直接403黑名單
  • DEFAULT_WITH_WHITE_AND_BLACK_LIST - 在默認限流策略的基礎(chǔ)上,直接403黑名單,再讓白名單內(nèi)的IP直接同行

快速開始

  1. 引入Ip-Limit依賴(已發(fā)布至Maven中央倉庫)
  <!-- 建議使用最新版本{ip-limiter.version} -->
  <dependency>
    <groupId>io.github.DDAaTao</groupId>
    <artifactId>ip-limiter</artifactId>
    <version>1.0.3</version>
  </dependency>
  1. 將 @EnableIpLimit 添加到 webApplication 類上,或其他可以被 Spring 掃描到的類上
  2. 將 @IpLimit 注解添加到想要做IP限流的方法(接口)上,根據(jù)需求動態(tài)調(diào)整參數(shù)

如果項目中沒有引入guava、spring-context包,則需要手動引入,否則會報java.lang.NoSuchMethodError異常

從1.0.1開始默認引入,如果項目中已有相關(guān)依賴,可以考慮通過去除掉

最佳實踐

一、自定義限流異常處理機制

/**
 * 默認情況下,當請求超出限流限制時,會打印日志并拋出 IpLimitException 異常
 * 用戶可以通過統(tǒng)一異常攔截器捕獲并自定義業(yè)務處理
 * 后續(xù)考慮增加回調(diào)或鉤子方法
 * */
@Slf4j
@ControllerAdvice
public class BaseExceptionHandler {

  @ExceptionHandler(IpLimitException.class)
  @ResponseBody
  public RestApiResult<Object> resolveCommonException(IpLimitException e) {
    log.error("IpLimitException Intercept. Please try again later.. " + e.getMessage());
    // 此處可以通過 e.getRequestIp() 和 e.getGroupName() 做一些限流回調(diào)業(yè)務處理
    return RestApiResult.fail("IpLimitException Intercept. Please try again later.. ");
  }
  
}

二、已存在鑒權(quán)方案時的接入方案

SpringCloud 項目或者大部分項目一般都會有做自己的鑒權(quán)機制,比如Spring-Security。
這個時候如果有需要和外部對接的接口,有兩種處理方法,一個是通過類似Oauth2之類的三方協(xié)議處理,
但是流程對接較為麻煩。

尤其是有些內(nèi)網(wǎng)項目,本身已有較好的安全保證。此時就可以另外一種方式,也就是 白名單 來處理
也就是 LimitType.WHITE_LIST

或在白名單之上追加限流規(guī)則,保障系統(tǒng)的可用性,也就是 LimitType.DEFAULT_WITH_WHITE_LIST

三、動態(tài)配置黑白名單

1.0.3 版本開始提供IpLimitUtils工具類,通過注入獲取實例后可以實現(xiàn)動態(tài)配置黑白名單,該動態(tài)配置數(shù)據(jù)與注解中的配置取并集

IpLimitUtils提供方法如下

  • putWhiteIpGroup - 可通過該方法動態(tài)配置新增白名單
  • removeWhiteIpGroup - 可通過該方法動態(tài)清空對應 group 的白名單配置
  • deleteWhiteIpGroupArrayStr - 可通過該方法動態(tài)去掉對應 group 中的某項 arrayStr 白名單
  • putBlackIpGroup - 可通過該方法動態(tài)配置新增黑名單
  • removeBlackIpGroup - 可通過該方法動態(tài)清空對應 group 的黑名單配置
  • deleteBlackIpGroupArrayStr - 可通過該方法動態(tài)去掉對應 group 中的某項 arrayStr 黑名單

有了這些方法,就可以通過第三方(比如數(shù)據(jù)庫)存儲黑白名單數(shù)據(jù),然后動態(tài)初始化、修改黑名單配置

異常記錄

  1. 暫時不支持Spring-6.x

更新日志

加粗表示重要版本更新,刪除線表示廢棄版本,不建議使用文章來源地址http://www.zghlxwxcb.cn/news/detail-588388.html

  • 1.0.1 實現(xiàn)滑動窗口限流模式
  • 1.0.2 調(diào)整規(guī)范,添加樣例項目鏈接
  • 1.0.3 開放用戶動態(tài)配置黑白名單

Ip-Limit 計劃實現(xiàn)功能

  • 用戶自定義限流器
  • 全局限流、全局分IP限流
  • 添加限流監(jiān)控,監(jiān)控數(shù)據(jù)回調(diào)(目前可以通過@ExceptionHandler(IpLimitException.class)處理異?;卣{(diào))
  • IP緩存統(tǒng)計數(shù)據(jù)可更換其他存儲數(shù)據(jù)源,避免過多占用JVM緩存
  • 可將IP更換為指定字段(比如賬號)限流
  • 更加靈活的異常處理機制

到了這里,關(guān)于Ip-Limit: 輕量級注解式IP限流組件(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 輕量級web開發(fā)框架Flask本地部署及無公網(wǎng)ip遠程訪問界面

    輕量級web開發(fā)框架Flask本地部署及無公網(wǎng)ip遠程訪問界面

    本篇文章講解如何在本地安裝Flask,以及如何將其web界面發(fā)布到公網(wǎng)上并進行遠程訪問。 Flask是目前十分流行的web框架,采用Python編程語言來實現(xiàn)相關(guān)功能。較其他同類型框架更為靈活、輕便、安全且容易上手。它可以很好地結(jié)合MVC模式進行開發(fā),開發(fā)人員分工合作,小型團

    2024年02月04日
    瀏覽(87)
  • 本地部署輕量級web開發(fā)框架Flask并實現(xiàn)無公網(wǎng)ip遠程訪問開發(fā)界面

    本地部署輕量級web開發(fā)框架Flask并實現(xiàn)無公網(wǎng)ip遠程訪問開發(fā)界面

    本篇文章主要講解如何在本地安裝Flask,以及如何將其web界面發(fā)布到公網(wǎng)進行遠程訪問。 Flask是目前十分流行的web框架,采用Python編程語言來實現(xiàn)相關(guān)功能。較其他同類型框架更為靈活、輕便、安全且容易上手。它可以很好地結(jié)合MVC模式進行開發(fā),開發(fā)人員分工合作,小型團

    2024年01月23日
    瀏覽(96)
  • git輕量級服務器gogs、gitea,非輕量級gitbucket

    git輕量級服務器gogs、gitea,非輕量級gitbucket

    本文來源:git輕量級服務器gogs、gitea,非輕量級gitbucket, 或 gitcode/gogs,gitea.md 結(jié)論: gogs、gitea很相似 確實輕, gitbucket基于java 不輕, 這三者都不支持組織樹(嵌套組織 nested group) 只能一層組織。 個人用,基于gogs、gitea,兩層結(jié)構(gòu)樹 簡易辦法: 把用戶當成第一層節(jié)點、該用戶的

    2024年02月07日
    瀏覽(140)
  • 輕量靈動: 革新輕量級服務開發(fā)

    輕量靈動: 革新輕量級服務開發(fā)

    從 JDK 8 升級到 JDK 17 可以讓你的應用程序受益于新的功能、性能改進和安全增強。下面是一些 JDK 8 升級到 JDK 17 的最佳實戰(zhàn): 1.1、確定升級的必要性:首先,你需要評估你的應用程序是否需要升級到 JDK 17。查看 JDK 17 的新特性、改進和修復的 bug,以確定它們對你的應用程序

    2024年02月07日
    瀏覽(99)
  • 輕量級 HTTP 請求組件

    Apache HttpClient 是著名的 HTTP 客戶端請求工具——現(xiàn)在我們模擬它打造一套簡單小巧的請求工具庫, 封裝 Java 類庫里面的 HttpURLConnection 對象來完成日常的 HTTP 請求,諸如 GET、HEAD、POST 等等,并嘗試應用 Java 8 函數(shù)式風格來制定 API。 組件源碼在:https://gitee.com/sp42_admin/ajaxjs/tr

    2024年02月01日
    瀏覽(101)
  • Kotlin 輕量級Android開發(fā)

    Kotlin 輕量級Android開發(fā)

    Kotlin 是一門運行在 JVM 之上的語言。 它由 Jetbrains 創(chuàng)建,而 Jetbrains 則是諸多強大的工具(如知名的 Java IDE IntelliJ IDEA )背后的公司。 Kotlin 是一門非常簡單的語言,其主要目標之一就是提供強大語言的同時又保持簡單且精簡的語法。 其主要特性如下所示: 輕量級:這一點對

    2024年02月07日
    瀏覽(904)
  • Tomcat輕量級服務器

    Tomcat輕量級服務器

    目錄 1.常見系統(tǒng)架構(gòu)? C-S架構(gòu) B-S架構(gòu) 2.B-S架構(gòu)系統(tǒng)的通信步驟 3.常見WEB服服務器軟件 4.Tomcat服務器的配置 下載安裝 環(huán)境變量配置 測試環(huán)境變量是否配置成功 測試Tomcat服務器是否配置成功? Tomcat窗口一閃而過的解決步驟 Tomcat解決亂碼 介紹: C-S架構(gòu)即Client/Server(客戶端/服務

    2023年04月14日
    瀏覽(103)
  • 一種輕量級定時任務實現(xiàn)

    現(xiàn)在市面上有各式各樣的分布式定時任務,每個都有其獨特的特點,我們這邊的項目因為一開始使用的是分布式開源調(diào)度框架TBSchedule,但是這個框架依賴ZK, 由于ZK的不穩(wěn)定性和項目老舊無人維護 ,導致我們的定時任務會偶發(fā)出現(xiàn)異常,比如:任務停止、任務項丟失、任務不

    2024年02月14日
    瀏覽(96)
  • 108中超輕量級的加載動畫!

    大家好,我是【程序視點】小二哥! 今天要上的菜不是 Animate.js,也不是 Move.js,而是能提供108種加載動畫的庫: Whirl . 話不多說,直接來看例子。 以上只是冰山一角。whirl的CSS加載動畫集合中有108種選項供你挑選。選中喜歡的動畫后,點擊“Grab the CSS on Github!”。 將跳轉(zhuǎn)到

    2024年02月03日
    瀏覽(94)
  • C++輕量級單元測試框架

    單元測試是構(gòu)建穩(wěn)定、高質(zhì)量的程序、服務或系統(tǒng)的必不可少的一環(huán)。通過單元測試,我們可以在開發(fā)過程中及時發(fā)現(xiàn)和修復代碼中的問題,提高代碼的質(zhì)量和可維護性。同時,單元測試也可以幫助我們更好地理解代碼的功能和實現(xiàn)細節(jié),從而更好地進行代碼重構(gòu)和優(yōu)化。

    2023年04月25日
    瀏覽(89)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包