【问题标题】:Throttle HTTP request in Java Servlet在 Java Servlet 中限制 HTTP 请求
【发布时间】:2011-09-06 18:06:44
【问题描述】:

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

【问题讨论】:

    标签: java http sockets servlets tcp


    【解决方案1】:

    托管在 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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            检查您使用的容器是否提供这种拒绝服务。如果不是,那么您将不得不使用过滤器。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-08-13
              • 2015-02-04
              • 2014-08-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-12-13
              相关资源
              最近更新 更多