Отрегулируйте HTTP-запрос в сервлете Java - PullRequest
7 голосов
/ 02 июня 2011

В java-сервлете, как я могу регулировать http-запросы, поступающие от пользователей на основе IP-адреса клиента? Я не хочу обслуживать более X запросов в секунду, поступающих с определенного IP-адреса источника, где X настраивается и имеет практические значения в [0.1; 10] диапазон (от 1 запроса в 10 секунд до 10 запросов в секунду).

Ответы [ 5 ]

4 голосов
/ 31 января 2013

В проекте owasp-esapi-java, размещенном на code.google.com, реализован дроссельный фильтр, который вы можете использовать "как есть" или использовать как источник вдохновения.

Вы можетепроверьте код по следующей ссылке:

http://code.google.com/p/owasp-esapi-java/source/browse/trunk/src/main/java/org/owasp/esapi/filters/RequestRateThrottleFilter.java

3 голосов
/ 02 июня 2011

Используйте фильтр сервлетов: если вы используете Jetty 7.0 или выше, это

2 голосов
/ 02 июня 2011

Как сказал @EJP, используя фильтр с HashMap, который хранит время последнего доступа по ключу IP-адреса. 10 запросов в секунду будут переводить до 100 мс между вызовами, минимум. Отправка обратно кода ошибки занятости сервера и уничтожение запроса быстро закроют ресурсы, используемые соединением. Есть готовые решения для Apache, если это вариант для вас.

2 голосов
/ 02 июня 2011

Я бы написал Фильтр для этой задачи.

1 голос
/ 02 июня 2011

Проверьте, обеспечивает ли используемый вами контейнер такой отказ в обслуживании. Если нет, то вам придется пойти с фильтром.

ServletRequest.getRemoteHost () предоставляет доступ к IP-адресу клиента.

...