在java servlet中,如何根据客户端的IP地址限制来自用户的http请求?我不希望每秒提供超过X个请求来自特定的源IP地址,其中X是可配置的,并且具有[0.1; 10]范围(从10秒内的1个请求到每秒10个请求)。
答案 0 :(得分:4)
在code.google.com上托管的owasp-esapi-java项目有一个节流过滤器的实现,你可以“按原样”使用它,或者用作你自己的灵感。
您可以通过以下链接查看代码:
答案 1 :(得分:3)
使用servlet过滤器:如果您使用的是Jetty 7.0或更高版本,则this
答案 2 :(得分:2)
我会为该任务编写一个过滤器。
答案 3 :(得分:2)
正如@EJP所说,使用带有HashMap的Filter,它通过IP地址密钥存储上次访问时间。一个秒的10个请求将在呼叫之间转换为100毫秒,最小值。发送服务器忙碌错误代码并终止请求将快速关闭连接使用的资源。 Apache有预先构建的解决方案,如果这是您的选择。
答案 4 :(得分:1)
检查您使用的容器是否提供此类拒绝服务。如果不是,那么你必须使用过滤器。
ServletRequest.getRemoteHost()允许您访问客户端IP。