경주장
[스프링 시큐리티 주요 아키텍처 이해] SecurityContext 본문
SecurityContext
- Authentication 객체가 저장되는 보관소
- ThredLocal에 저장되어 아무 곳에서나 참조가 가능하도록 설계함
- Authentication authentication = SecurityContextHolder.getContext().getAuthentication()
SecurityContextHolder
- SecurityContext 객체 저장소
- SecurityContext 객체 저장하는 방식
- MODE_THREADLOCAL : 스레드당 SecurityContext 객체를 할당, Default
- MODE_INhERITABLETHREADLOCAL : 메인 스레드와 자식 스레드에 관하여 동일한 SecurityContext를 유지
- MODE_GLOBAL : 응용 프로그램에서 단 하나의 SecurityContext를 저장
- SecurityContextHolder.clearContext() : SecurityContext 기존 정보 초기화
이런 SecurityContextHolder와 SecurityContext를 관리하는 SecurityContextPersistenceFilter 를 살펴보겠습니다.
SecurityContextPersistenceFilter 는 익명사용자의 요청, 인증 요청, 인증 이후 즉, 모든 요청에 대해 SecurityContext를 관리하는 역할을 합니다.
- 익명 사용자
- 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장
- AnoymousAuthenticationFiler에서 AnoymousAuthenticationToken 객체를 SecurityContext 에 저장
- 인증 시
- 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장
- UsernamePasswordAuthenticationFilter에서 인증 성공 후 SecurityContext에 UsernameAuthentication 객체를 SecurityContext에 저장 인증이 완료되면 Session에 SecurityContext를 저장
- 인증 후
- Session에서 SecurityContext를 꺼내어 SecurityContextHolder 에서 저장
- SecurityContext안에 Authentication 객체가 존재하면 계속 인증을 유지
- 최종 응답 시 공동
- SecurityContextHolder.clearContext() - SecurityContext 정보 초기화
SecurityContextPersistenceFilter 는 SecurityContextHolder의 SecurityContext를 관리하고 SecurityContext안의 Authentication 객체의 생성과 SecurityContext의 세션 저장은 AuthenticationFilter에서 담당합니다.
'스프링 > 스프링 시큐리티' 카테고리의 다른 글
[스프링 시큐리티 주요 아키텍처 이해] Authentication Flow (0) | 2022.02.08 |
---|---|
[스프링 시큐리티 주요 아키텍처 이해] Authentication (0) | 2022.02.08 |
[스프링 시큐리티 주요 아키텍처 이해] 다중 설정 클래스 (0) | 2022.02.07 |
[스프링 시큐리티 주요 아키텍쳐 이해] DelegatingFilterProxy, FilterChainProxy (0) | 2022.02.07 |
[Form 인증 API] CSRF, CsrfFilter (0) | 2022.02.07 |