Безопасность 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" для этого фрагмента кода