在Java Servlet中调节HTTP请求

问题描述:

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

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

使用Servlet过滤器:如果你在码头7.0或更高版本有this

正如@EJP表示,采用与存储的IP地址关键的最后访问时间HashMap中的过滤器。最少10次请求会在通话间翻译为100ms。发送服务器繁忙的错误代码并杀死请求将迅速关闭连接使用的资源。如果这是您的选择,那么Apache有预先构建的解决方案。

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

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

在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