본문 바로가기

카테고리 없음

[스프링 시큐리티] 기본 API & Filter 이해(4) LogoutFilter

  1. 로그아웃 요청을 보냄
  2. Spring Security 가 다음 작업을 진행한다.
    • 세션을 무효화
    • 인증 토큰을 삭제 - SecurityContext
    • 쿠키 정보 삭제
    • 로그인 페이지로 리다이렉트 처리
http.logout() // 로그아웃 기능이 작동
		.logoutUrl("/logout") // UI
		.logoutSuccessUrl("/login") // 로그아웃 성공 후 이동 페이지
		.deleteCookies("JSESSIONID", "remember-me") // 로그아웃 후 삭제할 쿠키 설정
		// 로그아웃이 수행될 때, 세션 무효화/인증 토큰 삭제 등을 기본적으로 제공하지만 사용자 정의로 작업할 내용이 있을 경우 설정
		
		.addLogoutHandler(new LogoutHandler() {
			@Override
			public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
				HttpSession session = request.getSession();
				session.invalidate(); // 세션 무효화
				}
		})
		// 로그아웃이 성공했을 때 작업 설정
		.logoutSuccessHandler(new LogoutSuccessHandler() {
			@Override
			public void onLogoutSuccess(HttpServeletRequest request, HttpServletResponse, Authentication authentication) throws Exception {
				response.sendRedirect("/login");
			}
		});

 

기본적으로 Security 가 로그아웃을 처리할 때는 기본적으로 POST 방식으로 처리되지만 GET 방식으로 설정할 수 있다.

  1. 로그아웃을 요청한다.
  2. 로그아웃 필터가 요청을 받아 해당 요청이 /logout 인지 체크한다.
  3. 일치하지 않으면 로그아웃 처리하지 않고 그 다음 필터로 이동한다.
  4. 일치하면 로그아웃필터가 시큐리티 컨텍스트로부터 Authentication 객체를 꺼내와서 로그아웃 핸들러에게 전달한다.
  5. 로그아웃 필터는 여러 개의 로그아웃 핸들러를 가지고 있는 데 그 중에 SecurityContextLogoutHandler 가 세션을 무효화하고, 쿠키를 삭제하고, 시큐리티 컨텍스트 객체를 삭제하고, 인증 객체도 null 로 초기화 한다.
  6. 로그아웃 필터가 성공적으로 종료되면 SimpleUrlLogoutSuccessHandler을 호출해서 로그인 페이지로 이동하도록 처리한다.