Spring Безопасность: перенаправлять на invalid-session-url вместо logout-success-url при успешном выходе из системы
Я реализовал систему входа в систему с Spring Security 3.0.2, все в порядке, но для этого: после добавления тега управления сеансом с атрибутом invalid-session-url при выходе из системы Spring всегда перенаправлял бы меня на неверный-session-url вместо url-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>
Большое спасибо.
Ответы
Ответ 1
По умолчанию процесс выхода из системы сначала приведет к аннулированию сеанса, поэтому запуск управления сеансом приведет к перенаправлению на неверную страницу сеанса. Указав invalidate-session = "false", будет исправлено это поведение.
<sec:logout logout-success-url="/logout" invalidate-session="false"
delete-cookies="JSESSIONID" />
Ответ 2
Не путайте атрибут logout-url в теге выхода с атрибутом invalid-session-url
из управления сеансом.
Последний является URL-адресом для выполнения действия выхода из системы, в то время как первый - это URL-адрес, который перенаправляется при выходе из системы.
Другими словами, при создании кнопки выхода, URL для этой кнопки будет значением logout-url
.
Теперь, когда выход завершен, защита spring по умолчанию будет отображать основной путь приложения к корневому приложению, т.е.: http://yourserver:yourport/yourwebapp/
. Этот путь переопределяется invalid-session-url
. Поэтому при выходе из системы вы будете отправлены туда.
Подводя итог, если вы не хотите поведения, о котором вы просите, тогда не используйте атрибут invalid-session-url
.
Надеюсь, что это поможет.