Spring Security: перенаправление на неверный URL-адрес сеанса вместо URL-адреса успешного выхода при успешном выходе из системы

Я реализовал систему входа-выхода с помощью Spring Security 3.0.2, все в порядке, но есть одна вещь: после того, как я добавил тег управления сеансом с атрибутом недействительного URL-адреса сеанса, при выходе из системы Spring всегда перенаправлял меня на недействительный -session-url вместо logout-success-url (что раньше было правильно).

Есть ли способ избежать такого поведения?

Это моя конфигурация:

<http use-expressions="true" auto-config="true">
        [...some intercept-url's...]

    <form-login login-page="/login" authentication-failure-url="/login?error=true"
            login-processing-url="/login-submit" default-target-url="/home"
            always-use-default-target="true" />

    <logout logout-success-url="/home?logout=true" logout-url="/login-logout" />

    <session-management invalid-session-url="/home?invalid=true" />
</http>

Большое спасибо.


person Alessandro    schedule 08.04.2010    source источник
comment
У меня точно такая же проблема. Вы решаете это?   -  person marioosh    schedule 15.11.2011


Ответы (2)


По умолчанию процесс выхода из системы сначала делает сеанс недействительным, поэтому управление сеансом инициирует перенаправление на страницу недопустимого сеанса. Указание invalidate-session="false" исправит это поведение.

<sec:logout logout-success-url="/logout" invalidate-session="false" 
delete-cookies="JSESSIONID" />
person Christopher Yang    schedule 03.01.2013
comment
Тогда как мы invalidate session. - person Jop.pop; 21.08.2015
comment
Добавления delete-cookies="JSESSIONID" должно быть достаточно - person Jim Richards; 15.06.2016
comment
Интересно, у меня на локалке работает с invalidate-session="true" а не при деплое на прод сервер, поэтому я и запутался. В любом случае это решение теперь работает на обоих. - person Somebody; 13.05.2020

Не путайте атрибут logout-url в теге выхода с атрибутом invalid-session-url из управления сеансом.

Последний — это URL-адрес для выполнения действия по выходу из системы, в то время как первый — это URL-адрес, на который перенаправляется после выхода из системы.

Другими словами, при создании кнопки выхода URL для этой кнопки будет иметь значение logout-url. Теперь, когда выход из системы завершен, Spring Security по умолчанию будет отображать путь к корневому приложению основного приложения, то есть: http://yourserver:yourport/yourwebapp/. Этот путь переопределяется invalid-session-url. Таким образом, при выходе из системы вы будете перенаправлены туда.

Подводя итог, если вам не нужно поведение, о котором вы просите, не используйте атрибут invalid-session-url. Надеюсь, это поможет.

person Baha    schedule 16.07.2010
comment
invalidate-session="true": используйте invalid-session-url. invalidate-session="false": использовать URL-адрес обработчика успешного выхода из системы. См.: ответ Кристофера - person Markus Pscheidt; 20.04.2017