繁体   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