SecurityContext안에 Authentication 객체가 있고 user객체정보가 저장되어있다.Authentication 객체가 저장되는 보관소로 필요 시 언제든지 Authentication 객체를 쓸 수 있도록 제공되는 클래스ThreadLocal에 저장되어 아무 곳에서나 참조가 가능하도록 설계함MODE_THREADLOCAL : 스레드당 SecurityContext 객체를 할당, 기본값MODE_INHERITABLETHREADLOCAL : 메인 쓰레드와 자식 스레드에 관하여 동일한 SecurityContext를 유지MODE_GLOBAL : 응용프로그램에서 단 하나의 SecurityContext를 저장한다.SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL);SecurityContextHolder.clearContext() : Security 기존 정보 초기화인증처리후
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();SecurityContextHolder.clearContext() 로 해서 초기화 시킨다.SecurityContextHolder 안에 SecurityContext 안에 Authentication 인증 객체 담는다결론
SecurityContextHolder 가 ThreadLocal객체를 가지고있고 ThreadLocal이 SecurityContext 를 담고있는다.SPRING_SECURITY_CONTEXT 라는 이름으로 )SecurityContext 객체의 생성, 저장 조회를 해준다.
익명사용자
SecurityContext 객체를 생성하여 SecurityContextHolder 에 저장AnonymousAuthenticationFilter 에서 AnonymousAuthenticationToken 객체를 SecurityContext 에 저장인증 시 ( 인증 시점 )
SecurityContext 객체를 생성하여 SecurityContextHolder 에 저장UsernamePasswordAuthenticationFilter 에서 인증 성공 후 SecurityContext에 UsernamePasswordAuthenticationToekn 객체를 SecurityContext에 저장SecurityContext를 저장인증 후 ( 사용자가 인증 후 자원에 접근할 때 )
SecurityContext 꺼내어 SecurityContextHolder 에서 저장SecurityContext 안에 Authentication 객체가 존재하면 계속 인증을 유지최종 응답 시 공통 ( 익명사용자, 인증시, 인증후에서 응답할 때에 항상 )
SecurityContextHolder.clearContext() 호출결론
SecurityContextPersistenceFilter는 SecurityContext 객체를 생성하여 SecurityContextHolder 에 저장하는 역할을 한다.SecurityContextPersistenceFilter 발동HttpSecurityContextRepository 클래스가 SecurityContext 객체를 생성하고 조회하고 그런 역할을 하는 클래스이다.SecurityContextHolder 에 SecurityContext 객체를 생성한다.SecurityContextPersistenceFilter 가 저장한다SecurityContextHolder.clearContext() 호출 해서 초기화 시킴정리