Logout 처리 및 LogoutFilter

Logout Flow

 

 

  • Client가 POST 방식으로 /logout url로 접근함. 
  • Server가 세션을 무효화, 인증토근 삭제, 쿠키정보 삭제
  • Client 화면을 로그인 페이지로 이동.  

Logout Config Code

 

  • .logout : 로그아웃 기능을 사용 
  • .logoutUrl("/logout") : 로그아웃 진행을 하려면 해당 경로로 접근을 해야함.
  • .logoutSuccessUrl("/login") : 로그 아웃이 완료되면 해당 경로로 이동함. 
  • .addLogoutHandler(new LogoutHandler() {} : 로그아웃시 session 삭제 작업을 수행하는 handler
  • .logoutSuccessHandler(new LogoutSuccessHandler() {} : 로그아웃 완료시 원하는 Url로 이동 시킴. 앞에 있는 .logoutSuccessUrl("/login")과 의 차이점은 좀 더 많은 설정을 할 수 있다는 것임. 
  • .deleteCookies("remember-me") : 쿠키를 삭제 

 

여기서 사용하는 Handler들은 기본적으로 LogoutFilter가 사용되면 자동적으로 수행하는 업무들임.  
    http
            .logout()
            .logoutUrl("/logout")
            .logoutSuccessUrl("/login")
            .addLogoutHandler(new LogoutHandler() {
                @Override
                public void logout(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) {
                    HttpSession session = httpServletRequest.getSession();
                    session.invalidate();
                }
            })
            .logoutSuccessHandler(new LogoutSuccessHandler() {
                @Override
                public void onLogoutSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
                    httpServletResponse.sendRedirect("/login");
                }
            })
            .deleteCookies("remember-me")
            ;
}

LogoutFilter

 

 

  • Client가 LogoutFilter를 통해 logout POST요청을 보냄 
  •  AntPathRequestMatcher가 /logout 경로가 맞는지 확인함.
    • 요청한 경로가 아닌 경우 chain.doFilter를 수행
  • SecurityContext가 Client정보가 있는 Authentication을 가지고 와서 Filter에게 넘겨줌.
  • SecurityContextLogoutHandler가 세션 무효화, 쿠키 삭제 그리고 SecurityContextHolder.clearContext() 메소드를 통해 Authentication 객체를 삭제함. 
  • 성공적으로 인증객체가 삭제가 되면 login 페이지로 이동시킴. 

'Backend > Security' 카테고리의 다른 글

AnonymousAuthenticationFilter  (0) 2023.01.03
Remember Me 인증  (0) 2023.01.03
UsernamePasswordAuthenticationFilter  (0) 2023.01.03
Boot Security  (0) 2023.01.02
JWT(JSON Web Token)  (0) 2023.01.02