[Spring Security] Security 기본 API 이해 #3

권영태·2023년 7월 31일

Security

목록 보기
3/6

이 포스트는 정수원님의 스프링 시큐리티 강의 수강 후 정리한 글입니다.

LogoutFilter

  • Spring Security는 기본적으로 Logout을 Post 형식으로 쓴다.
    그래서 그냥 Get 방식으로 쓰면 오류가 발생하지만, 쓸 수 있긴 하다.
  • LogoutFilter에 Post형식의 Request가 들어오면 AntPathRequestMatcher(/logout)에 요청을 매칭시킨다.
    • 만약 요청이 매칭되지 않으면 chain.doFilter로 이동해 다음 Filter로 넘어가고, 매칭되면 SecurityContext에서 Authentication 객체를 꺼내온다.
  • 그런 다음 SecurityContextLogoutHandler를 통해 세션 무효화, 쿠키 삭제, SecurityContextHolder.clearContext()를 진행한다.
http.logout()       // logout
    .logoutUrl("/logout")       // logoutUrl를 /logout으로 연결
    .logoutSuccessUrl("/login")        // logout 성공 Url를 /login으로 연결
    .addLogoutHandler(new LogoutHandler() {     // 새로운 Logouthandler를 작동시켜서
        @Override
        public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
            HttpSession session = request.getSession(); // 요청에 대한 세션을 가져와
            session.invalidate();       // 세션 무효화 시킴
        }
    })
    .logoutSuccessHandler(new LogoutSuccessHandler() {      // 로그아웃이 성공적으로 진행되면 LogoutsuccessHandler를 만들어
        @Override
        public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
            response.sendRedirect("/login");        // login으로 Redirect 응답함
        }
    })
    .deleteCookies("remember-me")       // remeber-me 쿠키를 지움
    ;
profile
GitHub : https://github.com/dudxo

0개의 댓글