Безопасность SessionFixationProtectionStrategy, мешающая работе сессионных компонентов

Я использую Spring 3.1.1. Выпуск, Безопасность 3.1.0. Выпуск.

Я добавил вход / выход в свое веб-приложение, однако bean-объект сессий не работает так, как был. Бин используется для подключения к CMS, называемой CMSConnector.

Для аутентификации пользователей я реализовал AuthenticationProvider, и в вызове authenticate() я получаю CMSConnector в области сеанса и вызываю CMSConnector.login(). Если вход в систему CMS не удается, он не в состоянии входа в систему.

ЭТА ПРОБЛЕМА -

Если вход выполнен успешно, @predestroy logout() вызывается сразу после успешного входа. Затем я обнаружил, что SessionFixationProtectionStrategy вызывает недействительный предыдущий сеанс и назначает ему новый сеанс.

session.invalidate();
session = request.getSession(true); // we now have a new session

Invalidate() вызывает метод @predestroy для сессионного объекта EJB.

Поэтому я временно удалил аннотацию @predestroy, оставив соединение не закрытым. (ОЧЕНЬ ПЛОХАЯ ПРАКТИКА.)

Как обходится решение проблемы?

Я попытался создать @PostConstruct и поместить процесс входа в систему, но @PostConstruct не вызывается при вызове request.getSession(true).

Спасибо!

Джейсон

2 ответа

Решение

Я не решил свой первоначальный вопрос, но я реализовал обходной путь - сеанс с истечением срока действия в объекте истечения сеанса вместо того, чтобы присоединяться с помощью @predestroy.

Я думаю, что это не SessionFixationProtectionStrategy, а ConcurrentSessionControlStrategy.

Установите max-session ="-1" для этого фрагмента кода

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