상세 컨텐츠

본문 제목

🌱👮🏿‍♀️Spring Security (3) - Logout 처리, LogoutFilter 동작 순서

SPRING/spring security

by 개발하는 정복자 2022. 5. 24. 12:16

본문

이전 챕터

🌱👮🏿‍♀️Spring Security (2) - Login Form 인증, FormLoginFilter 동작 순서

 

 🙉 로그아웃(POST) 처리 과정

- Client 👉🏾 Server : request(/logout)- Server 👉🏾 Client:

  1. 세션 무효화
  2. 인증토큰 삭제 (SecurityContext 포함)
  3. 쿠키정보 삭제
  4. 로그인 페이지 다이렉트

🙈 LogoutFilter 동작 순서

☝🏿LoginFilter

✌🏿. AntPathRequestMatcher("/logout")

  • url "/logout"으로 요청이 왔는지 확인
  • 아니면 다음 필터로 ~

🤟🏿.  AuthenticationSecutiryContext로 부터 인증된 객체를 꺼내온다.

🐍(巳(뱀 사). SecutiryContextLogoutFilter 작동

  • 세션 무효화
  • 쿠키 삭제
  • SecurityContextHolder.clearContext() 작동 (SecutiryContext 삭제) 

✋. SimpleUrlLogoutSuccessHandlerFilter로 login 페이지로 이동

 

 

코드로 보자!

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
                .logout()
                .logoutUrl("/logout")   // default : /logout
                .logoutSuccessUrl("/login") // login 성공 후 이동 페이지
                .addLogoutHandler(new LogoutHandler() { // 로그아웃 핸들러 설정, LogoutHandler를 구현하면 됨
                    @Override
                    public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
                        HttpSession session = request.getSession();
                        session.invalidate();   // 세션 무효화
                    }
                })
                .logoutSuccessHandler(new LogoutSuccessHandler() {  // 로그아웃 성공 후 핸들러 호출
                    @Override
                    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
                        response.sendRedirect("/login");
                    }
                })
                .deleteCookies("remember-me")	// 쿠키 삭제
                ;
    }
}

관련글 더보기

댓글 영역