SecurityContextPersistenceFilter

귀찮Lee·2022년 7월 26일
0

Spring Security

목록 보기
4/13
post-custom-banner

◎ SecurityContextPersistenceFilter

  • SecurityContextPersistenceFilter

    • SecurityContext 객체를 영속화하는 역할을 수행하는 Filter
    • 인증 처리 매커니즘 이전에 실행되어야 하기 때문에 Security Filter들 중에서도 앞부분에 실행되는 Filter
    • SecurityContextRepository 라는 SecurityContext 저장소 객체를 보유
      • 해당 저장소 객체를 통해 SecurityContext를 영속화하고 기존에 저장된 SecurityContext 객체를 꺼내어 SecurityContextHolder에 저장하는 등의 역할을 수행

◎ SecurityContextPersistenceFilter 처리 순서

  1. 클라이언트의 요청이 발생
  2. SecurityContextRepository 인터페이스의 loadContext() 메소드로 저장된 SecurityContext 객체를 가져옴
    • 기본으로 사용되는 저장소: HttpSessionSecurityRepository
    • HttpSession에 SecurityContext를 저장
  3. 기존에 저장했던 SecurityContextHolder 의 clearContext() 로 SecurityContext를 제거
  4. SecurityContextRepository 에 해당 SecurityContext 를 다시 저장

◎ SecurityContext

  • SecurityContext

    • SecurityContextHolder로 접근하는데 사용
    • Authentication 객체를 가지고 있다.
  • SecurityContextRepository

    • SecurityContext를 Persist하기 위한 구현체
    • 일반적으로 사용되는 구현체 : HttpSessionSecurityContextRepository

◎ SecurityContext 객체의 생성, 저장, 조회

  • 익명 사용자
    • 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장
    • AnonymouseAuthenticationFilter에서 AnonymousAuthenticationToken 객체를 SecurityContext에 저장
  • 인증 시
    • 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장
    • UsernamePasswordAuthenticationFilter에서 인증 성공 후 UsernamePasswordAuthentication 객체를 SecurityContext에 저장
    • 인증이 최종 완료되면 Session 에 SecurityContext를 저장
  • 인증 후
    • Session에서 SecurityContext 꺼내어 SecurityContextHolder에서 저장
    • SecurityContext안에 Authentication 객체가 존재하면 계속 인증을 유지
  • 최종 응답 시 공통
    • SecurityContextHolder안의 SecurityContext객체에서 보관하던 인증정보를 반드시 초기화 해야함
    • SecurityContextHolder.clearContext() 메서드를 호출해 인증 정보를 초기화
profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!
post-custom-banner

0개의 댓글