У нас есть существующая структура 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, а другие прочтут его.
Есть ли какая-либо другая структура или решение, которое мы можем использовать?
Большое спасибо за вашу помощь.