#java #spring #spring-security #spring-session
#java #весна #spring-безопасность #весенняя сессия
Вопрос:
У меня есть приложение, которое использует как Spring Security, так и Spring Session. Я конвертирую свое приложение для хранения своих весенних сессий в MySQL, используя конфигурацию XML jdbc, и это, похоже, работает, поскольку записи сеанса отображаются в таблице MySQL.
По другим причинам я использую внутренне созданный объект сеанса в сочетании с объектами весеннего сеанса и пытаюсь использовать идентификатор весеннего сеанса для связи двух сеансов. Вот основная проблема, с которой я сталкиваюсь:
Сначала я выполняю аутентификацию, и создается весенняя сессия. Это дает мне идентификатор весенней сессии A, который я сохраняю в своей внутренней таблице сеансов для ссылки на весеннюю сессию. Срабатывают другие фильтры, и запрос отправляется на контроллер REST. В контроллере REST я пытаюсь получить доступ к весенней сессии и вижу действительный идентификатор и весеннюю сессию, но с идентификатором весенней сессии B, таким образом, связь между весенней сессией и моей внутренней сессией разорвана.
Есть ли причина, по которой у меня было бы 2 отдельных аутентифицированных весенних сеанса с одинаковой основной информацией в сеансах?
Отдельный, но связанный с этим вопрос: если я попытаюсь получить доступ к идентификатору весенней сессии через RequestContextHolder, он выдает идентификатор в стандартном формате шестнадцатеричного кода с заглавными буквами (например, 3AD475F78823D7CDC5C4571D50B0AB35), тогда как если я обращаюсь к нему через SecurityContextHolder, идентификатор находится в другом формате (например, c2215820-bd08-4c78-b26e-0821913333a1), есть ли для этого какая-то особая причина?
Спасибо.
Ответ №1:
для защиты от фиксации сеанса Spring Security по умолчанию предоставляет вам новый сеанс после аутентификации, см.https://www.baeldung.com/spring-security-session#session-fixation
Пожалуйста, дайте мне знать, если это полезно.
-Kaj 🙂
Комментарии:
1. Интересно, я проверю журналы, похоже, что где-то должно быть сообщение об уничтожении сеанса, если это так. Я буду копаться и обновлять, спасибо!
2. @JoeD Хорошо! Пожалуйста, дайте мне знать, как это работает для вас 🙂
3. В настоящее время не найдено никаких сообщений / событий, уничтоженных сеансом. Все еще не понимаю, почему существует разница в форматах между идентификаторами весенней сессии, как я упоминал выше.