Я пишу тезис о приложении, разработанном с использованием Spring-Boot
и Spring-Security
в качестве механизма аутентификации. Я хотел бы лучше понять, как сеанс управляется платформой.
Аутентификация выполняется с использованием страницы входа с именем пользователя и паролем, а сеанс сохраняется в файле cookie JSESSIONID
. Информация о пользователе содержится в базе данных.
Я знаю, что процесс аутентификации работает в Spring Security следующим образом:
Учетные данные передаются от пользователя кAuthenticationFilter
, который создает объект аутентификации, содержащий такие учетные данные;
Созданный объект Authentication
проходит через AuthenticationManager
, который выбирает право AuthenticationProvider
, которое может обрабатывать этот тип аутентификации;
AuthenticationProvider
, используя только имя пользователя, извлеченное из объекта аутентификации, вызывает UserDetailsService
;
UserDetailsService
извлекает информацию о пользователе из базы данных и возвращает объект UserDetails
, а именно Принципал, в AuthenticationProvider
;
AuthenticationProvider
в этот момент проверяет, совпадают ли предоставленные пользователем учетные данные с учетными данными, содержащимися в Принципале. Если да, он инкапсулирует Принципал в объекте Authentication
, для которого в этот момент для параметра аутентификации будет установлено значение "true", и возвращает его в AuthenticationManager
, что, в свою очередь, возвращает его в AuthenticationFilter
;
Теперь AuthenticationFilter
сохраняет в SecurityContext
объект аутентификации внутри Принципала, содержащий информацию о пользователе, извлеченную из базы данных. SecurityContext
сохраняется в ThreadLocal.
Вот часть, которую я не совсем понимаю:
В то же время
Другой фильтр должен создать и отправить пользователю файл cookie
JSESSIONID
, а также локально сохранить сеанс пользователя (значение файла cookie * 1059) и создать привязку. между этим значением сеанса и объектом аутентификации, который содержит принципала внутри с пользовательской информацией ... правильно ??
Мои вопросы:
Является ли процедура правильной? Что такое фильтр на шаге № 7? Где сеанс хранится на стороне сервера? Где сохраняется привязка между сессией и SecurityContext
?
Заранее спасибо.