SecurityContextPersistenceFilter
SecurityContext 객체의 생성, 저장, 조회 를 담당
FilterChainProxy의 Filter 중 2번 째에 위치
접근에 따른 동작
익명사용자의 접근
-
SecrutityContext 객체를 생성하여 SecurityContextHolder에 저장함
-
AnonymousAuthenticationFilter 에서 만든 AnonymousAuthenticationToken 객체를 SecurityContext에 저장시킴
인증 시도 시
-
SecurityContext 객체를 생성하여 SecurityContextHolder에 저장
-
UsernamePasswordAuthenticationFilter 에서 인증 성공 후 만든 UsernamePasswordAuthenticationToken을 SecurityContext에 저장
-
최종 인증 완료 후 Session에 SecurityContext 를 저장
인증 성공 후
-
Session 에서 SecurityContext 를 꺼내 SecurityContextHolder 에 저장
-
SecurityContext에 안에 Authentication 객체가 존재 시 계속적으로 인증을 유지
모든 응답의 최종과정
-
SecurityContextHolder.clearContext() 로 SecurityContext를 비우고 다음 작업을 준비한다.
동작 과정
-
사용자의 Request
-
SecurityContextPersistenceFilter 작동
-
HttpSecurityContextRepository 호출
-
인증 전이라면 SecurityContext 를 생성하여 SecurityContextHolder를 생성하고 다른 필터로 chain
-
다른필터에서 Authentication객체를 생성하면 SecurityContextHolder의 SecurityContext에 저장
-
SecurityContextPersistenceFilter 는 Session에 SecurityContext를 저장시킴
-
기존의 SecurityContext를 clear 시키고 Response
-
만약 HttpSecurityContextRepository 호출 시점에 사용자가 인증 된 상태라면
-
SecurityContextPersistenceFilter는 Session에서 SecurityContext를 가져와서 SecurityContextHolder에 저장하고 다른 Filter로 Chain
큰틀에서 확인
-
인증 전이거나 Anonymous 사용자일 경우
-
SecurityContextPersistenceFilter 는 SecurityContextHolder에 ThreadLocal 안에 SecurityContext를 저장 하고 다른 Filter로 Chain
-
인증 후 일 경우
-
SecurityContextPersistenceFilter는 Session에서 SecruityContext 를 가져와 ThreadLocal에 저장, ThreadLocal을 SecurityContextHolder에 저장하고 다음 Filter로 Chain
** 상관 관계 SecurityContextHolder > ThreadLocal > SecurityContext > Authentication
'springframework > 시작하자SpringSecurity' 카테고리의 다른 글
20.AuthenticationMananger를 구현한 ProviderManager (0) | 2020.09.22 |
---|---|
19.Authentication Flow (0) | 2020.09.22 |
17.SecurityContextHolder, SecurityContext (0) | 2020.09.22 |
16.Authentication (0) | 2020.09.21 |
15.필터 초기화와 다중 보안 설정 (0) | 2020.09.21 |