DefaultLogoutPageGeneratingFilter 를 통해 로그아웃 페이지를 제공하며 “ GET / logout ” URL 로 접근이 가능하다.RequestMatcher 를 사용할 경우 GET, PUT, DELETE 모두 가능하다우리가 이전 시간에 폼 로그인에 대한 내용을 봤다. 우리가 폼 로그인 API를 설정하게 되면 자동적으로 두 개의 페이지가 생성된다. 그 중 하나가 로그인, 하나가 로그아웃 페이지로 우리가 사용할 수 있게 되는 것. 그래서 로그인 페이지는 DefaultLoginPageGeneratingFilter 가 생성하고 로그아웃 페이지는 DefaultLogoutPageGeneratingFilter ****가 생성해 우리가 사용할 수 있게 되는 것. 로그아웃 페이지에는 링크가 있다. 로그아웃 실행시키는 링크를 클릭하면 로그아웃이 실행되며 그 로그아웃 실행은 기본적으로 POST 방식, 그 다음 URL은 /logout 으로 설정되어있는데 HTTP 메소드가 POST 방식으로만 로그아웃이 실행되도록 default 는 그렇게 설정되어 있다. 그 말은 POST 방식이 아닌 다른 HTTP 메소드 방식으로는 로그아웃이 작동하지 않는다.
POST 방식이 아닌 다른 방식으로도 사용 가능하게 하는 방법이 2가지 있다.
첫번째는 CSRF 기능을 비활성화 하는 것. CSRF 를 간단히 설명하자면 어떤 공격자가 악의적인 목적으로 사용된 세션을 가지고 어떤 다른 악의적인 목적에 사용하는 것을 방지하는 기능이다. 그래서 사용자 요청에 대해 세션을 악의적인 목적에 사용하지 못하도록 Spring Security 가 CSRF 기능을 제공하고 있는데 공격에 대비할 수 있도록 기본으로는 활성화 되어있다. CSRF 기능을 비활성화하게 되면 반드시 POST 가 아닌 다른 방식으로도 구현할 수 있다.
두번째는 RequestMatcher 를 사용하는 것이다. RequestMatcher를 통해 우리는 이런 설정들을 변경할 수 있는데 이러할 경우에도 POST 가 아닌 다른 방식으로도 로그아웃을 구현할 수 있다.
로그아웃은 기본적으로 로그아웃 필터가 있다. 이 필터가 로그아웃에 대한 전반적인 처리를 하는 필터인데 우리가 만약 이 필터를 사용하지 않고 예를 들어 직접 Spring MVC 에서 로그아웃을 구현하겠다한다면 가능하다. 로그아웃 필터를 거치지 않고 Spring MVC 에서 커스텀하게 로그아웃을 구현할 수 있다. 다만 한 가지 주의할 점은 만약 로그인 페이지가 커스텀하게 생성될 경우 로그아웃 기능도 커스텀하게 구현해야 한다.
일반적으로 우리가 폼 로그인 방식을 설정하게 되면 기본적으로 로그인 페이지가 생성된다. 다만 우리가 학습 시에도 로그인 페이지도 커스텀하게 만들어서 우리만의 로그인 페이지를 사용할 수 있다 언급했는데, Spring Security 에서 제공하는 기본적인 로그인 페이지를 사용하지 않고 만약 커스텀한 로그인 페이지를 만들어 사용한다면 로그아웃도 커스텀하게 만들어야 한다. 기본적으로 제공하는 로그인 페이지를 사용한다면 로그아웃도 기본적으로 제공하는 걸 사용하는 것. 그렇지 않으면 실행되지 않는다.
일반적으로 로그아웃도 대부분은 default 로 사용해도 크게 문제는 없다. 몇 가지 로그아웃이 성공했을 경우 어떻게 하겠다는 정도고 API는 우리가 설정을 하는 거고 나머지는 특별한 커스터마이징이 없더라도 크게 문제되는 건 없다.

.**logoutUrl("/logoutProc") // 로그아웃이 발생하는 URL 을 지정한다 (기본값은 “/logout” 이다)**이 설정이 로그아웃을 실행했을 때의 URL 이다. POST 방식으로 로그아웃 되어있는데, 그 로그아웃 실행 URL 을 명시해주는 것.
.logoutRequestMatcher(new AntPathRequestMatcher("/logoutProc","POST")) // 로그아웃이 발생하는 RequestMatcher 을 지정한다. logoutUrl 보다 우선적이다
// Method 를 지정하지 않으면 logout URL이 어떤 HTTP 메서드로든 요청될 때 로그아웃 할 수 있다
어떤 URL 로 로그아웃 시킬 것이고 방식은 어떻게 할 것이냐를 줄 수 있다. 위와 같이 주게 되면 URL 은 /logoutProc , 메소드는 POST 만 가능하다고 지정하는 것. 위와 같이 설정되었다면 logoutRequestMatcher 가 우선순위가 된다. 만약 뒤에 POST, 우리가 뒤에 문자열로 POST 또는 GET 을 줄 수 있는데 이 메소드를 지정하지 않으면 GET, PUT, DELETE 가 모두 가능하다. 따라서 CSRF 를 비활성화 할 경우, 두 번째는 RequestMatcher 를 사용할 경우로 앞서 살펴보았다.
.logoutSuccessUrl("/logoutSuccess") // 로그아웃이 발생한 후 리다이렉션 될 URL이다. 기본값은 "/login?logout"이다