리프레쉬 토큰은 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 코드 구현한거 올려보겠음.
'Spring Security' 카테고리의 다른 글
| [Spring Security] Refresh Token 기반으로 new AccessToken받는 API 구현하기 (1) | 2025.05.05 |
|---|---|
| [Spring Security] Token Filter 구현하기 (0) | 2025.05.05 |
| [Spring Boot] 테스트코드에서 롬복 import안됨 (0) | 2025.05.04 |
| [Spring Security] JWT와 Authentication객체 (쓰임의 차이, 내가 헷갈렸던 부분 정리) (0) | 2025.05.04 |
| [Spring Security] 토큰 생성, 유효성 검사, 정보 빼오는 클래스 코드 - TokenProvider (0) | 2025.05.04 |