Безопасность SessionFixationProtectionStrategy, мешающая работе bean-компонентов с областью действия сеанса

Я использую 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).

Спасибо!

Джейсон


person Jason    schedule 11.04.2012    source источник


Ответы (2)


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

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

person Ravi Kadaboina    schedule 14.04.2012
comment
Спасибо, Рави, в сеансе отладки мой preDestroy вызывается процессом SessionFixationProtectionStrategy. - person Jason; 17.04.2012

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

person Jason    schedule 03.07.2012