Запретить пользователю делать ограниченное количество запросов в секунду

Среда:
Веб-приложение на основе Java-EE


Проблема :
Необходимо ограничить пользователя выполнением более 5 (например) запросов в течение одной секунды (в основном BOT)


Решение :
В качестве базовой конструкции я планирую иметь 2 синхронизированных Map в области приложения

Map<String, Map<Long, Integer>>

Строка предназначена для идентификатора сеанса запроса

Long предназначена для текущего второго представления

Integer - удерживать счетчик запросов


Процесс:

Шаг 0:

Настройка фильтра для перехвата каждого запроса

Шаг 1:

определение карты Я посмотрю, является ли текущая минута нечетной, тогда я добавлю данные на mapOne и очищу mapTwo

Шаг 2:

карта процесса

int requestNoForThisSecond = mapXX.get(request.getSession().getId()).get(currentSecondRepresantationInLong);
if(requestNoForThisSecond <= 5){
          requestNoForThisSecond++; 
          mapXX.get(request.getSession().getId()).put(currentSecondRepresantationInLong, requestNoForThisSecond);
}else{
         response.sendRedirect();// redirect to some captcha page
    } 

Шаг 4:

также удалите запись сеанса, если сеанс истекает / пользователь выходит из системы


Это очень простой дизайн для проблемы

У кого-нибудь из вас есть идея / предложение получше?

5
задан Jigar Joshi 4 January 2012 в 12:54
поделиться