Spring Security 에서 로그아웃을 하기 위해선 2가지 방법이 있다. 다른방법이 있을지 모르겠지만
본인이 사용했던 방법은 2가지다.
.logoutUrl("URL") 과 .logoutRequestMatcher() 방법이다.
처음 설정할땐 .logoutUrl 을 사용했었으나 csrf() 설정 여부에 따라 GET 방식, POST 방식 요청이 달라져
logoutRequestMatcher() 로 설정했다.
기본적으로 logoutUrl 은 "/logout" 으로 설정되어 있다.
아무 설정도 안했을 땐 /logout 으로 요청 시 로그아웃이 된다.
여기서 달라지는건 CSRF 활성화 여부이다.
아래는 Spring Security 의 logoutUrl 메서드이다.
먼저 주석내용을 구글번역기에 돌려보면 아래와 같다.
/** * The URL that triggers log out to occur (default is "/logout"). If CSRF protection * is enabled (default), then the request must also be a POST. This means that by * default POST "/logout" is required to trigger a log out. If CSRF protection is * disabled, then any HTTP method is allowed. * * <p> * It is considered best practice to use an HTTP POST on any action that changes state * (i.e. log out) to protect against * <a href=" https://en.wikipedia.org/wiki/Cross-site_request_forgery">CSRF
* attacks</a>. If you really want to use an HTTP GET, you can use * <code>logoutRequestMatcher(new AntPathRequestMatcher(logoutUrl, "GET"));</code> * </p> * @param logoutUrl the URL that will invoke logout. * @return the {@link LogoutConfigurer} for further customization * @see #logoutRequestMatcher(RequestMatcher) * @see HttpSecurity#csrf() */
해석 /** * 로그아웃이 발생하도록 트리거하는 URL(기본값은 "/logout")입니다. CSRF 보호의 경우 *가 활성화되면(기본값) 요청도 POST여야 합니다. 이것은 다음을 의미합니다. * 기본 POST "/logout"은 로그아웃을 트리거하는 데 필요합니다. CSRF 보호가 * 비활성화되면 모든 HTTP 메서드가 허용됩니다. * * <p> * 상태를 변경하는 모든 작업에 HTTP POST를 사용하는 것이 모범 사례로 간주됩니다. * (즉, 로그아웃) * <a href="https://en.wikipedia.org/wiki/Cross-site_request_forgery">CSRF * 공격</a>. HTTP GET을 실제로 사용하려면 다음을 사용할 수 있습니다. * <code>logoutRequestMatcher(new AntPathRequestMatcher(logoutUrl, "GET"));</code> * </p> * @param logoutUrl 로그아웃을 호출할 URL. * 추가 사용자 정의를 위해 @return {@link LogoutConfigurer}를 반환합니다. * @see #logoutRequestMatcher(RequestMatcher) * @HttpSecurity#csrf() 참조 */
위 내용을 보면 Spring Security의 기본 Logout URL은 "/logout" 이라고 한다.
CSRF 설정이 활성화(enable) 되어 있으면 요청은 POST 여야 하고 비활성화면 모든
HTTP 메서드(GET, POST, PUT 등) 가 허용된다고 합니다. HTTP GET을 실제로 사용하기 위해선 위 내용처럼
logoutRequestMatcher(new AntPathRequestMatcher(logoutUrl, "GET")); 을 사용하라고 합니다.