在Java Servlet中,如何基于客户端的IP地址限制HTTP请求的流量?我不希望为来自特定源IP地址的请求提供超过X个每秒的服务,其中X是可配置的,并且在[0.1; 10]范围内具有实际价值(从10秒钟内的1个请求到每秒的10个请求)。
owasp-esapi-java项目托管在code.google.com上,提供了一个限流过滤器的实现,您可以直接使用或用作自己实现的灵感。
您可以通过以下链接查看代码:
如@EJP所说,使用一个HashMap存储IP地址键的最后访问时间,并与过滤器一起使用。 每秒10个请求将转化为调用之间的最小100毫秒。 返回服务器繁忙错误代码并终止请求将快速关闭连接使用的资源。 如果可以,Apache有预构建的解决方案。
检查您正在使用的容器是否提供此类拒绝服务。如果没有,那么您将不得不使用过滤器。
ServletRequest.getRemoteHost() 可以让您访问客户端 IP。