在Java Servlet中限制HTTP请求

时间:2011-06-02 01:12:37

标签: java http sockets servlets tcp

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

5 个答案:

答案 0 :(得分:4)

在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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

正如@EJP所说,使用带有HashMap的Filter,它通过IP地址密钥存储上次访问时间。一个秒的10个请求将在呼叫之间转换为100毫秒,最小值。发送服务器忙碌错误代码并终止请求将快速关闭连接使用的资源。 Apache有预先构建的解决方案,如果这是您的选择。

答案 4 :(得分:1)

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

ServletRequest.getRemoteHost()允许您访问客户端IP。