Ответ 1
Следующий код работает для меня (обратите внимание, что он не имеет logout().disable()
)
http.logout().permitAll();
http.logout().logoutSuccessHandler((new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK)));
Я использую весеннюю безопасность с REST, и я использую URL (/logout
) в качестве конечной точки для моего метода выхода из системы. Но после вызова этого метода он перенаправляет меня на (/login?logout
), я знаю, что это весна logOutSuccessUrl
. И я хочу избавиться от перенаправления. Это мой код:
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().fullyAuthenticated()
.and().requiresChannel().anyRequest().requiresSecure()
.and().httpBasic().disable().logout()
.disable()
// .logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK))
.csrf().disable();
}
Я пытался использовать HttpStatusReturningLogoutSuccessHandler
но он не работал, и даже установка logoutSuccessUrl()
ничего не меняет.
Вы знаете, как я могу отключить это перенаправление?
Следующий код работает для меня (обратите внимание, что он не имеет logout().disable()
)
http.logout().permitAll();
http.logout().logoutSuccessHandler((new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK)));
Так что, пока нет ответа, я отправляю свое решение, которое сработало для меня:
.logout()
.logoutUrl("/api/user/logout")
.permitAll()
.logoutSuccessHandler((httpServletRequest, httpServletResponse, authentication) -> {
httpServletResponse.setStatus(HttpServletResponse.SC_OK);
})
.and()
Просто верните чистый HTTP_OK (200) после успешного выхода из системы - весна не перенаправит вас в этом случае
Используйте этот метод:
.logout().logoutSuccessUrl("enter address here where you want to go after logout")
Для тех, кто использует XML-конфигурацию, вот эквивалентный фрагмент, приведенный Тахиром Ахтаром.
В элементе <http>
настройте элемент <logout>
следующим образом:
<logout
logout-url = "/some/path/for/logout"
invalidate-session = "true"
delete-cookies = "JSESSIONID"
success-handler-ref = "httpStatusReturningLogoutSuccessHandler"
/>
И определите httpStatusReturningLogoutSuccessHandler
компонент httpStatusReturningLogoutSuccessHandler
следующим образом:
<bean
id = "httpStatusReturningLogoutSuccessHandler"
class = "org.springframework.security.web.authentication.logout.HttpStatusReturningLogoutSuccessHandler"
/>
Возможно, вы захотите попробовать
http.logout(). logoutRequestMatcher (новый AntPathRequestMatcher ("/thisistomisleadlogoutfilter"));
Это эффективно перенаправляет /thisistomisleadlogoutfilter для входа в систему? Logout. Таким образом, вы должны иметь возможность использовать /logout вместо этого
для действия logoutSuccessXXX() не забудьте добавить allowAll(), поскольку файл cookie очищается после вызова метода logout(). Итак, мой пример решения:
http
......
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/logoutSuccess")
**.permitAll()**