Окружающая среда:
Веб-приложение на основе Java-EE
Задача
Необходимо ограничить пользователя, чтобы сделать более 5 (например) запрос в течение одной секунды (в основном BOT)
Решение :
В качестве базового проекта я планирую иметь 2 синхронизированных Map
в области применения
Map<String, Map<Long, Integer>>
String
для sessionId запроса
Long
для текущего второго представления
Integer
для хранения количества запросов
Процесс:
Шаг 0:
Настройка Filter
для перехвата каждого запроса
Шаг 1:
определить карту
Я посмотрю, если текущий minute
нечетный, тогда я добавлю данные на 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:
также удаляет запись сеанса, если сеанс истекает / пользователь выходит из системы
Это очень простой дизайн для проблемы
У кого-нибудь из вас есть идея или предложение получше?