Я использую Spring 3.1.1.Release, Security 3.1.0.Release.
Я добавил логин/выход из системы в свое веб-приложение, однако компонент сеанса не работает так, как раньше. Компонент используется для подключения к CMS с именем CMSConnector.
Для аутентификации пользователей я реализовал AuthenticationProvider, а в вызове authentication() я получаю CMSConnector на уровне сеанса и вызываю CMSConnector.login(). Если вход в систему CMS завершается неудачно, он не выполняет вход.
ПРОБЛЕМА -
Если вход в систему выполнен успешно, @predestroy logout() вызывается сразу после успешного входа. Затем я обнаружил, что SessionFixationProtectionStrategy вызывает аннулирование предыдущего сеанса и назначает ему новый сеанс.
session.invalidate();
session = request.getSession(true); // we now have a new session
Инвалидация () вызывает метод @predestroy для bean-компонента с областью действия сеанса.
Поэтому я временно удалил аннотацию @predestroy, оставив соединение не закрытым. (ОЧЕНЬ ПЛОХАЯ ПРАКТИКА.)
Что такое обходной путь для решения проблемы?
Я попытался создать @PostConstruct и поместить туда процесс входа в систему, но @PostConstruct не вызывается при вызове request.getSession(true).
Спасибо!
Джейсон