복붙노트

[SPRING] 스프링 보안 - 로그 아웃 리디렉션 사용 안함

SPRING

스프링 보안 - 로그 아웃 리디렉션 사용 안함

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. ==============================

    1.다음 코드는 나를 위해 작동합니다 (logout (). disable ()이 없음을주의하십시오)

    다음 코드는 나를 위해 작동합니다 (logout (). disable ()이 없음을주의하십시오)

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

    2.그래서 아무 대답도 아직 없기 때문에 나는 저를 위해 일한 나의 해결책을 게시합니다 :

    그래서 아무 대답도 아직 없기 때문에 나는 저를 위해 일한 나의 해결책을 게시합니다 :

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

    성공적으로 로그 아웃 한 후 깨끗한 HTTP_OK (200) 만 반환하십시오.이 경우 스프링이 리다이렉트하지 않습니다.

  3. ==============================

    3.이 방법을 사용하십시오.

    이 방법을 사용하십시오.

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

    4.이것을 시험해 볼 수도 있습니다.

    이것을 시험해 볼 수도 있습니다.

    http.logout (). logoutRequestMatcher (새로운 AntPathRequestMatcher ( "/ thisistomisleadlogoutfilter"));

    이것은 효과적으로 / thisistomisleadlogoutfilter를 login? logout으로 리디렉션합니다. 따라서 / 로그 아웃을 대신 사용할 수 있어야합니다.

  5. ==============================

    5.XML 설정을 사용하는 사용자를 푸시하십시오. Tahir Akhtar가 제공 한 것과 동일한 코드 조각이 있습니다.

    XML 설정을 사용하는 사용자를 푸시하십시오. Tahir Akhtar가 제공 한 것과 동일한 코드 조각이 있습니다.

    요소 내에서 요소를 다음과 같이 구성하십시오.

    <logout
        logout-url          = "/some/path/for/logout"
        invalidate-session  = "true"
        delete-cookies      = "JSESSIONID"
        success-handler-ref = "httpStatusReturningLogoutSuccessHandler"
    />
    

    다음과 같이 httpStatusReturningLogoutSuccessHandler 빈을 정의하십시오.

    <bean
        id      = "httpStatusReturningLogoutSuccessHandler"
        class   = "org.springframework.security.web.authentication.logout.HttpStatusReturningLogoutSuccessHandler"
    />
    
  6. ==============================

    6.logoutSuccessXXX () 액션의 경우 logout () 메서드가 호출 된 후 쿠키가 지워 지므로 permitAll ()을 추가하는 것을 잊지 마십시오. 그래서 내 샘플 솔루션은 다음과 같습니다.

    logoutSuccessXXX () 액션의 경우 logout () 메서드가 호출 된 후 쿠키가 지워 지므로 permitAll ()을 추가하는 것을 잊지 마십시오. 그래서 내 샘플 솔루션은 다음과 같습니다.

             http
                ......
                .and()
                    .logout()
                        .logoutUrl("/logout")
                        .logoutSuccessUrl("/logoutSuccess")
                        **.permitAll()**
    
  7. from https://stackoverflow.com/questions/36354405/spring-security-disable-logout-redirect by cc-by-sa and MIT license