У нас есть веб-приложение. Мы хотим предотвратить множественный вход одних и тех же пользователей. По сути, мы хотим, чтобы это произошло так:
- Джон входит в приложение как «user1».
- Машина Джона немного зависает по какой-то неизвестной причине.
- Джон не может ждать. Джон переходит на компьютер2, открывает там браузер и входит в систему как «пользователь1».
- Сеанс Джона в браузере на первом компьютере теперь должен быть аннулирован.
для этого мы планируем сохранять в базе данных все sessionId всех вошедших в систему пользователей. Это делается для того, чтобы проверить, не вошел ли другой пользователь с тем же именем на другом компьютере или использовал другой браузер на том же компьютере. Чтобы реализовать это, мы планируем выполнить проверку идентификатора сеанса в классе Filter, который проверяет сеанс. При этом будут вызовы базы данных каждый раз, когда вызывается класс Filter.
Это хорошая практика?
РЕДАКТИРОВАТЬ:
SessionId самого последнего пользователя, вошедшего в систему, всегда будет отслеживаться. Таким образом, в примере, когда Джон входит в систему с помощью браузера на машине 2, идентификатор сеанса, сохраненный в базе данных (с компьютера 1), будет переопределен идентификатором сеанса в браузере на компьютере 2. Теперь, когда браузер на компьютере1 снова используется, он автоматически аннулирует сеанс, поскольку обнаруживает, что идентификатор сеанса для пользователя теперь отличается.
springSecurityFilterChainопределяется вweb.xmlкакfilter, так что да, это так. Мой вывод: не переусердствуйте и не оптимизируйте свое приложение преждевременно. Если кажется правильным что-то сделать где-то — делайте это, если нет реальных ограничений, о которых нужно беспокоиться. Чего вам действительно не следует делать, так это обращаться к базе данных внутри JSP-страницы, остальное зависит от вас. - person injecteer   schedule 01.12.2015