簡體   English   中英

Java Servlet 中的限制 HTTP 請求

[英]Throttle HTTP request in Java Servlet

在 java servlet 中,如何根據客戶端的 IP 地址限制來自用戶的 http 請求? 我不想每秒處理來自特定源 IP 地址的超過 X 個請求,其中 X 是可配置的,並且在 [0.1; 中具有實際值; 10] 范圍(從 10 秒內的 1 個請求到每秒 10 個請求)。

owasp-esapi-java 項目,托管在 code.google.com,有一個節流過濾器的實現,您可以“按原樣”使用或用作您自己的靈感。

您可以在以下鏈接中查看代碼:

http://code.google.com/p/owasp-esapi-java/source/browse/trunk/src/main/java/org/owasp/esapi/filters/RequestRateThrottleFilter.java

使用 servlet 過濾器:如果您使用的是 Jetty 7.0 或更高版本,則有這個

我會為該任務編寫一個過濾器。

正如@EJP 所說,使用帶有 HashMap 的過濾器,該過濾器通過 IP 地址密鑰存儲上次訪問時間。 每秒 10 個請求將轉換為調用之間的至少 100 毫秒。 發回服務器繁忙錯誤代碼並終止請求將快速關閉連接使用的資源。 如果您願意,可以使用 Apache 的預構建解決方案。

檢查您使用的容器是否提供這種拒絕服務。 如果不是,那么您將不得不使用過濾器 go。

ServletRequest.getRemoteHost() 使您可以訪問客戶端 IP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM