У меня было требование реализовать базовое ограничение скорости для простого API (максимум 40-50 запросов в день) в Java
Требование было:
Запрос от IP должен быть ограничен до N в М секундах (например, 10 запросов за 60 секунд)
Вот что я сделал: использовал фильтр и логика была:
Подход 1:
использовал cache2k для сохранения IP-адреса и pojo со счетчиками и временем последнего доступа
поставить каждый ip как ключ и pojo как значение (у pojo есть такие поля, как: count, последний доступ.)
как только приходит запрос, проверьте ip в кеше,
если ip не получен, вставьте в кеш:
Ключ: ф
значение: pojo с номером 1 и последним доступом в качестве текущей даты.
если ip получен, проверьте дату последнего доступа.
если разница между временем последнего доступа и текущим временем составляет> M секунд, это означает, что с этого IP-адреса не поступало запросов более чем за M секунд. создайте новое Pojo с номером 1 и последним доступом в качестве текущей даты и вставьте в кэш
если разница
Подход 2:
Я не хочу слишком усложнять использование Guava для простого приложения.
Было бы замечательно, если кто-то может дать предложения.
Спасибо