SecurityContextHolder란

2025. 11. 30. 22:06·Spring

Spring Security 사용 시 SecurityContextHolder를 통해 인증 정보를 저장하고 가져오게 되는데 어떤 방식으로 Authentication을 저장하는지 간략하게 알아보자.

 

계층 구조

인증된 사용자 정보인 Principal을 Authentication에서 관리, Authentication을 SecurityContext에서 관리, SecurityContext는 SecurityContextHolder가 관리한다.

ThreadLocal을 사용하여 Authentication을 저장한다.(한 스레드 내에서 사용하는 공용 저장소) 이를 통해 Authentication을 한 스레드 내에서 공유한다. 즉, 스레드가 달라지면 제대로 된 인증 정보를 가져올 수 없다.

ThreadLocal 모드

모드 설명

MODE_THREADLOCAL 기본. 스레드마다 독립 저장소
MODE_INHERITABLETHREADLOCAL 자식 스레드도 인증 정보 상속
MODE_GLOBAL 전역 저장 — 거의 안 씀, 위험함

 

 

요청이 끝나면 Spring Security FilterChain의 마지막 단계에서 SecurityContextHolder.clearContext() 호출되어 인증 정보 제거됨.

 

캐시 사용 여부

SecurityContextHolder.clearContext()를 호출 하므로 모든 Authentication 방식에서 캐시는 존재하지 않는것인지?

방식    SecurityContext 캐시  매 요청 인증 비용
세션 기반 있음 (HTTP Session) 낮음 — 세션만 확인
JWT 기반 없음 중간 — JWT 서명 검증만 수행

 

그래서 뭐냐면

SecurityContextHolder는 스레드와 SecurityContext를 연결해주어 Authentication을 저장할 수 있는데, 스레드가 달라지면 인증 정보를 가져올 수 없으니, 런타임 시 SecurityContextHolderStrategy라는 인터페이스의 구현체들에게 스레드와 SecurityContext를 어떻게 연결시킬지에 대한 전략을 위임하며, 각 요청 실행 컨텍스트마다 인증 정보가 안전하게 격리되고 필요한 시점에 정확한 SecurityContext를 반환하도록 동작한다.

 

'Spring' 카테고리의 다른 글

Spring Data JPA - From 절 Subquery (InlineView)사용하기 - 2  (3) 2024.11.07
Spring Data JPA - From 절 Subquery (InlineView)사용하기  (5) 2024.11.05
Spring Boot에서 Runtime Logging Level 변경하기  (1) 2024.09.03
Spring Boot 서버 포트 변경하기  (1) 2023.10.03
'Spring' 카테고리의 다른 글
  • Spring Data JPA - From 절 Subquery (InlineView)사용하기 - 2
  • Spring Data JPA - From 절 Subquery (InlineView)사용하기
  • Spring Boot에서 Runtime Logging Level 변경하기
  • Spring Boot 서버 포트 변경하기
HWBB
HWBB
흥미주도개발자
  • HWBB
    코딩공부방
    HWBB
  • 전체
    오늘
    어제
    • 분류 전체보기 (179)
      • 알고리즘 (66)
      • Android (27)
      • Kotlin (0)
      • Java (2)
      • Design Pattern (2)
      • React Native (1)
      • Python (0)
      • TIL (23)
      • Unity (0)
      • React (2)
      • AWS (0)
      • Git (11)
      • MFC (1)
      • Spring (5)
      • Computer Science (4)
      • Vue (4)
      • Infra (6)
      • 박현우 (11)
      • 도서리뷰 (2)
      • 영어공부 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 승윤이
  • 공지사항

  • 인기 글

  • 태그

    github
    자바
    깃허브
    알고리즘
    programmers
    Java
    백준
    coding
    android studio
    코딩테스트
    baekjoon
    AWS
    코틀린
    Kotlin
    algorithm
    Android
    안드로이드
    GIT
    프로그래머스
    안드로이드 스튜디오
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
HWBB
SecurityContextHolder란
상단으로

티스토리툴바