Как хранить информацию о весеннем сеансе безопасности в Redis?

Я использую Spring Security для аутентификации и авторизации в моем приложении. Я использую базу данных Neo4j в качестве бэкэнда и реализовал userDetailsService для аутентификации.

Однако всякий раз, когда мое приложение перезапускается, пользователь вынужден снова войти в систему. Чтобы преодолеть это, я думаю сохранить информацию о сеансе в базе данных redis и загружать данные в контекст безопасности Spring при каждом запуске приложения.

Пожалуйста, передайте, если есть какие-либо статьи и указатели для реализации того же.

Я думаю о следующей реализации для него: 1) Для каждой успешной аутентификации сохраняйте данные пользователя и детали сеанса в redis. Это должно быть реализовано в методе loadUserByUsername() реализации UserDetailsService. 2) Удалить данные из redis, когда пользователь выходит из системы. Где я могу сделать эту информацию? Есть ли какая-либо функция безопасности Spring, где я могу вызвать это 3) Загружать все данные из Redis в Spring Security каждый раз, когда приложение перезапускается, опять же, где мне нужно написать эту логику?

Пожалуйста, дайте мне знать, если я пропустил какую-либо информацию.

4 ответа

Все, что вам нужно сделать, это реализовать

  • SecurityContextRepository, который обрабатывает хранение контекста безопасности для красных
  • В конце концов пользовательский фильтр, который получает / сохраняет информацию о сеансе (GenericFilterBean)

Я думаю, что можно просто дать стандартному фильтру другой репозиторий, но я не уверен, мне все равно нужна была моя собственная реализация...

Сохранить сессию в Redis теперь из коробки

http://docs.spring.io/spring-session/docs/current/reference/html5/guides/httpsession.html

Вам необходимо настроить функцию "Запомнить меня" в Spring Security.

Проверка подлинности "помни меня" или "постоянный вход в систему" ​​означает, что веб-сайты могут помнить личность участника между сеансами. Обычно это достигается отправкой файла cookie в браузер, при котором файл cookie обнаруживается во время будущих сеансов и вызывает автоматический вход в систему. Spring Security предоставляет необходимые хуки для выполнения этих операций и имеет две конкретные реализации для запоминания. Один использует хеширование для сохранения безопасности маркеров на основе cookie, а другой использует базу данных или другой механизм постоянного хранения для хранения сгенерированных токенов.

Дополнительную информацию можно найти в документации Spring Security: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/remember-me.html

Вы можете использовать готовые реализации или внедрить свои собственные (вышеупомянутый redis).

Как сказал Люк Тейлор, действие Tomcat по умолчанию - сериализация / десериализация сеансов при перезапуске контейнера. Вот

Атрибут pathname стандартного менеджера - это имя файла сериализации. Если вы не укажете имя пути, но по умолчанию используется SESSIONS.SER Если вы не хотите, чтобы при повторном запуске сеансы возвращались, вам нужно указать его как пустое строковое значение.

Другие вопросы по тегам