Java Servlet 中限制 HTTP 请求

发布于 2024-11-11 01:36:04 字数 141 浏览 0 评论 0原文

在 java servlet 中,如何根据客户端的 IP 地址限制来自用户的 http 请求?我不想每秒处理来自特定源 IP 地址的超过 X 个请求,其中 X 是可配置的并且具有 [0.1; 中的实际值; 10]范围(从 10 秒内 1 个请求到每秒 10 个请求)。

In a java servlet, how can I throttle http requests coming from users based on the client's IP address? I do not want to serve more than X requests per second coming from a particular source IP address where X is configurable and having practical values in [0.1; 10] range (from 1 request in 10 sec to 10 requests per sec).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

靑春怀旧 2024-11-18 01:36:04

托管在 code.google.com 上的 owasp-esapi-java 项目有一个节流过滤器的实现,您可以“按原样”使用它,也可以将其用作您自己的灵感。

您可以通过以下链接查看代码:

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

The owasp-esapi-java project, hosted at code.google.com, has an implementation of a throttle filter that you can use "as is" or use as inspiration for your own.

You can check the code at the following link:

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

风筝有风,海豚有海 2024-11-18 01:36:04

使用servlet过滤器:如果您使用的是Jetty 7.0或更高版本,则有这个

Use a servlet filter: if you're on Jetty 7.0 or higher there is this

一抹淡然 2024-11-18 01:36:04

我会为该任务编写一个过滤器。

I would write a Filter for that task.

没有心的人 2024-11-18 01:36:04

正如@EJP所说,使用带有HashMap的过滤器,通过IP地址键存储上次访问时间。每秒 10 个请求将转化为调用之间至少 100 毫秒。发回服务器繁忙错误代码并终止请求将快速关闭连接使用的资源。如果您愿意的话,有针对 Apache 的预构建解决方案。

As @EJP said, using a Filter with a HashMap that stores the last access time by IP address key. 10 requests a second would translate to 100ms between calls, minimum. Sending a server busy error code back and killing the request will quickly close the resources used by the connection. There are prebuilt solutions for Apache if that's an option for you.

じее 2024-11-18 01:36:04

检查您使用的容器是否提供此类拒绝服务。如果没有,那么你就必须使用过滤器。

ServletRequest.getRemoteHost() 使您可以访问客户端 IP。

Check if the container you are using provides this kind of Denial Of Service. If no, then you would have to go with a filter.

ServletRequest.getRemoteHost() gives you access to the client IP.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文