Spring security

스프링 시큐리티 기본 API 및 Filter 이해 - Logout 처리, LogoutFilter

sami355 2023. 6. 25. 00:06

스프링 시큐리티 기본 API 및 Filter 이해 - Logout 처리, LogoutFilter

인프런 정수원님의 “스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security"를 보고 작성한 글입니다.

http
                // 로그아웃 설정
                .logout(logout -> logout
                        // 로그아웃 요청을 처리할 URL 설정
                        .logoutUrl("/logout")
                        // 로그아웃 성공 시 리다이렉트할 URL 설정
                        .logoutSuccessUrl("/login")
                        // 로그아웃 핸들러 추가 (세션 무효화 처리)
                        .addLogoutHandler((request, response, authentication) -> {
                            HttpSession session = request.getSession();
                            session.invalidate();
                        })
                        // 로그아웃 성공 핸들러 추가 (리다이렉션 처리)
                        .logoutSuccessHandler((request, response, authentication) ->
                                response.sendRedirect("/login"))
                        // 로그아웃 시 쿠키 삭제 설정 (예: "remember-me" 쿠키 삭제)
                        .deleteCookies("remember-me")
                );

로그아웃은 기본적으로는 POST요청으로 보내야 한다.

또한 addLogoutHandler와 logoutSuccessHandler의 차이는 다음과 같다.

로그아웃 성공 실패 여부 상관없이 시도했을때는 addLogoutHandler가 수행되고 로그아웃이 성공했을때는 logoutSuccessHandler가 수행된다.

그리고 코드상에서 직접 세션을 무효화 하거나 쿠키를 삭제하지 않아도 스프링 시큐리티가 제공하는 SecurityContextLogoutHandler에 의해 세션이 무효화 되고 쿠키가 삭제된다. 이때 핸들러가 적용되는 순서는 개발자가 직접 정의한 핸들러가 먼저 호출되고 그다음 스프링 시큐리티에서 제공하는 핸들러가 적용된다.