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. Надеюсь, что это поможет.