Spring security - отключить переадресацию выхода из системы

Я использую весеннюю безопасность с 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() ничего не меняет.

Вы знаете, как я могу отключить это перенаправление?

Ответ 1

Следующий код работает для меня (обратите внимание, что он не имеет logout().disable())

http.logout().permitAll();
http.logout().logoutSuccessHandler((new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK)));

Ответ 2

Так что, пока нет ответа, я отправляю свое решение, которое сработало для меня:

.logout()
.logoutUrl("/api/user/logout")
.permitAll()
.logoutSuccessHandler((httpServletRequest, httpServletResponse, authentication) -> {
    httpServletResponse.setStatus(HttpServletResponse.SC_OK);
})
.and()

Просто верните чистый HTTP_OK (200) после успешного выхода из системы - весна не перенаправит вас в этом случае

Ответ 3

Используйте этот метод:

.logout().logoutSuccessUrl("enter address here where you want to go after logout")

Ответ 4

Для тех, кто использует 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"
/>

Ответ 5

Возможно, вы захотите попробовать

http.logout(). logoutRequestMatcher (новый AntPathRequestMatcher ("/thisistomisleadlogoutfilter"));

Это эффективно перенаправляет /thisistomisleadlogoutfilter для входа в систему? Logout. Таким образом, вы должны иметь возможность использовать /logout вместо этого

Ответ 6

для действия logoutSuccessXXX() не забудьте добавить allowAll(), поскольку файл cookie очищается после вызова метода logout(). Итак, мой пример решения:

         http
            ......
            .and()
                .logout()
                    .logoutUrl("/logout")
                    .logoutSuccessUrl("/logoutSuccess")
                    **.permitAll()**