Хэш-карта в CustomAuthenticationProcessingFilter - PullRequest
1 голос
/ 10 мая 2019

У нас есть существующая структура Spring Boot Security, которая использует CustomAuthenticationProcessingFilter с некоторыми другими фильтрами и базой данных для входа в систему пользователей.

Требуется, чтобы каждому пользователю не разрешалось входить в систему в течение 30-60 секунд после попытки. Нам еще не ясно, должна ли попытка быть успешной или нет.

Мы думаем об использовании HashMap для записи имени пользователя (уникального) с отметкой времени попытки входа в систему.

Если пользователь не находится в HashMap, просто добавьте в него имя пользователя и продолжайте вход в систему. Если пользователь находится в HashMap, проверьте временную метку, и если эта попытка длится 30-60 секунд, просто выйдите из фильтра. Это не пройдет процесс входа в систему.

private static HashMap<String, DateTime> loginMap = new HashMap<String, DateTime>();
...
...
if(user not in map) {
    put the user
}
else if(user in map and time difference > 30-60sec) {
    change timestamp;
    go ahead to login;
}
else {
    exit without changing time;
}

Иногда попытки входа 4-5 раз в течение 1 сек. Поскольку HashMap будет доступен многим потокам, насколько стабильно это решение? Только первый поток будет добавлен в HashMap, а другие прочтут его. Есть ли какая-либо другая структура или решение, которое мы можем использовать?

Большое спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...