본문 바로가기
Spring Security

[Spring Security] SecurityContextHolder란?

by 우주물고기 2025. 5. 5.
반응형

리프레쉬 토큰은 DB에도 보관하기 때문에

Entity랑 Repository까지 만들어준 상태

 

이제 토큰 필터를 만들 차례임.

 

필터는 전달되기 전후에

URL패넡에 맞는 모든 요청 처리하는 기능이 있음.

HTTP요청이 controller까지 도달하기 전/후에 작동.

 

요청이 오면, 헤더값 비교해서 토큰 있는지 확인함.

유효성 확인하고

유효한 토큰이면 Security Context Holder(클래스)에 인증 정보를 저장함.

 

 

** SecurityContextHolder는 앞에서도 잠깐 언급한 적 있는데,

인증 객체(Authentication)가 저장되는 곳임.

(그래서 getAuthentication()메서드가 주로 호출되는곳이 필터라고 들음)

따라서 여기서 인증 객체 꺼내서 사용할 수 있음.

 

이 클래스는 스레드마다 공간을 할당(thred local)함 -> 아무곳에서나 참조 가능

이러한 SecurityContext 객체들을 저장하는 객체가 SecurityContextHolder임.

 

SecurityContextHolder는 스레드 로컬 저장소임.

즉 현재 요청을 처리하는 스레드만 접근할 수 있는 공간에

Authentication객체를 메모리상에 저장하는 역할을 함.

 

 

 

이해가 잘 안가서 지피티한테 흐름 물어보니까

이해하기 쉽게 잘 설명해줬음.

 

 

✅ 한마디 정리

SecurityContextHolder 클래스는 SecurityContext 객체를 스레드별로 보관하고, 그 안에는 Authentication 객체가 들어 있다. 이걸 꺼내서 인증된 사용자 정보를 사용한다.

 

 

여기서 의문점이 궁금한게 생겼음


왜 DB에서 안 꺼내고 SecurityContextHolder에서 꺼내나?

인증된 다음이면 DB에서 가져오는게 낫지 않나?

 

매 요청마다 DB왔다갔다 하는게 비효율적이기때문.

따라서 DB에서 사용자 조회 한다음에, Authentication객체 만들고

그 객체를 SecurityContextHolder에 저장해두고

-> 이후 요청들은 (필터에서 토큰 유효하면) Securitycontext에서 인증 정보 사용하는게

훨씬 빠르고 효율적임.

 


 

다시 이어서 설명하자면,

 

SecurityContext는 인증객체(Authentication)가 저장되는 보관소.

여기서 인증객체 꺼내서 쓸 수 있는거임.

이 클래스는 스레드마다 공간 할당(스레드 로컬)

-> 아무곳에서나 참조 가능하고, 독릭접 사용 가능

 

---> 이러한 SecurityContext객체를 저장하는 객체가

SecurityContextHolder임.

 

 

다음 포스팅에서 TokenAuthenticationFilter.java 코드 구현한거 올려보겠음.

반응형