Spring Security - SecurityContext, SecurityContextHolder

2021. 4. 17. 15:08SPRING/SPRING SECURITY

SecurityContext 플로우

SecurityContext

  • Authentication 객체를 저장한다.
  • TheadLocal에 저장되어 아무 곳에서나 참조 가능하다(Thread Safe)
  • 예) Authentication authentication = SecurityContextHolder.getContext().getAuthentication()
  • 인증이 완료된 후에는 HttpSession에 저장된다.

SecurityContextHolder

  • SecurityContext를 관리한다.
  • SecurityContext 저장 방식을 3가지로 나눠 관리한다.
  • MODE_THREADLOCAL : 스레드당 SecurityContext 객체를 할당, 기본값
  • MODE_INHERITABLETHREADLOCAL : 메인 스레드와 자식 스레드에 관하여 동일한 SecurityContext를 유지
  • MODE_GLOBAL :  응용 프로그램에서 단 하나의 SecurityContext를 저장한다
  • 요청당 하나의 스레드가 할당되어 하나의 SecurityContext를 참조할 수 있는게 기본이다.
  • 하지만 경우에 따라, 한 요청에서 자식 스레드를 생성하고 자식 스레드에서 인증객체 접근이 필요한 경우 MODE_INHERITABLETHREADLOCAL로 변경하여 사용할 수 있다.
  • MODE_GLOBAL은 잘 사용되지 않지만 단일 스레드로 요청을 받는 환경에서 사용될 수 있다.