[스프링] 스프링 시큐리티와 로그아웃 처리

스프링 시큐리티를 사용하면 인증(Authentication)인가(Authorization)를 쉽게 구현할 수 있습니다. 이번 글에서는 스프링 시큐리티를 이용하여 로그아웃 처리를 구현하는 방법에 대해 알아보겠습니다.

로그아웃 처리 구현

스프링 시큐리티에서 기본적으로 제공하는 로그아웃 처리 기능은 다음과 같습니다.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .logout()
            .logoutUrl("/logout") // 로그아웃 URL 설정
            .logoutSuccessUrl("/login") // 로그아웃 성공 시 리다이렉트될 URL 설정
            .invalidateHttpSession(true) // HTTP 세션 무효화 설정
            .deleteCookies("JSESSIONID"); // 로그아웃 시 삭제할 쿠키 설정
}

위와 같이 HttpSecurity를 통해 .logout() 메서드를 이용하여 로그아웃 처리 관련 설정을 할 수 있습니다.

로그아웃 링크 생성

로그아웃 링크를 생성하는 방법은 다음과 같습니다. Thymeleaf를 사용한다고 가정하고 작성하였습니다.

<a th:href="@{/logout}">로그아웃</a>

.logoutUrl() 메서드에 지정한 URL인 /logout으로 요청을 보내면, 스프링 시큐리티가 로그아웃 처리를 수행합니다.

로그아웃 성공 시 동작

로그아웃 성공 시에 특정 작업을 추가로 수행하고자 한다면 LogoutSuccessHandler 인터페이스를 구현하여 커스텀 로그아웃 핸들러를 등록할 수 있습니다.

public class CustomLogoutSuccessHandler implements LogoutSuccessHandler {

    @Override
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        // 로그아웃 성공 시 수행할 작업 작성
        response.sendRedirect("/goodbye");
    }
}

이렇게 구현한 커스텀 로그아웃 핸들러를 스프링 시큐리티 설정에 등록하여 사용할 수 있습니다.

로그아웃 처리에 대한 내용을 알아보았습니다. 스프링 시큐리티를 이용하여 웹 애플리케이션의 로그아웃 처리를 쉽게 구현할 수 있으니, 참고하여 활용해 보시기 바랍니다.

참고 문헌: 스프링 공식 문서