SecurityContextPersistenceFilter
- SecurityContext 객체를 생성, 저장, 조회한다.
- Filter 리스트 중 2번째 위치한다.
- 인증 성공 후 Session에 저장하는 역활을 한다.
HttpSecurityContextRepository
- 실질적으로 SecurityContext를 생성, 저장, 조회하는 클래스
동작 시나리오
익명 사용자가 접근 할 경우
- 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장한다.
- AnonymousAuthenticationFilter에서 AnonymousAuthenticationToken 객체를 SecurityContext에 저장한다.
인증 사용자가 접근 할 경우
- 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장한다.
- UsernamePasswordAuthenticationFilter에서 인증 성공 후 UsernamePasswordAuthenticationToken 객체를 SecurityContext에 저장한다.
- 인증이 최종 완료되면 SecurityContextPersistenceFilter가 Session에 SecurityContext를 저장한다.
인증 된 사용자가 접근 할 경우
- Session에서 SecurityContext 객체를 꺼내서 SecurityContextHolder에 저장한다.
- SecurityContext 안에는 Authentication 객체가 존재하며 계속 인증을 유지한다.
최종 응답 시 공통 로직
- SecurityContextHolder.clearContext()를 통해서 SecurityContext를 삭제처리한다.
- why? 모든 경우에 SecurityContext 객체를 SecurityContextHolder에 저장하기 때문에