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()
호출 해서 초기화 시킴정리