1. SecurityContext 개념
인증 프로세스를 성공적으로 완료한 후 요청이 유지되는 동안 AuthenticationManager는 Authentication 인스턴스를 저장한다. Authentication 객체를 저장하는 인스턴스를 보안 컨텍스트라고 한다. 여기서 Authentication은 인증된 엔티티에 대한 세부 정보(사용자의 이름이나 권한)
public interface SecurityContext extends Serializable {
Authentication getAuthentication();
void setAuthentication(Authentication authentication);
}
2. SecurityContext를 관리하는 전략
1) MODE_THREADLOCAL
- 스프링 시큐리티의 기본 전략
- ThreadLocal을 이용해 컨텍스트 관리
- 요청마다 새 스레드가 생성되고 새 스레드는 자체 보안 컨텍스트를 가짐
- 각 스레드는 자신의 보안 컨텍스트에 있는 세부 정보에만 접근할 수 있음
- 상위 스레드의 세부 정보가 새 스레드의 보안 컨텍스트로 복사되지 않음
2) MODE_INHERITABLETHREADLOCAL
- 하나의 요청에 여러 스레드가 사용될 때
- 요청마다 새 스레드가 생성되고 새 스레드는 자신의 보안 컨텍스트를 가지면서 요청의 원래 스레드로부터 세부 정보를 복사해서 가짐
- 프레임워크가 자체적으로 스레드를 만들 때만 작동(@Async 메서드 이용), 코드로 직접 스레드를 만들면 문제 발생
3) MODE_GLOBAL
- 보안 컨텍스트가 애플리케이션의 모든 스레드에 공유됨, 즉 모든 스레드가 같은 보안 컨텍스트에 접근
- 경합 상황 발생가능해서 동기화 처리 필요
- 독립형 애플리케이션에 주로 사용
3. DelegatingSecurityContextRunnable
1) 개념
프레임워크가 모르는 방법으로 코드가 새 스레드를 시작했을 때, 보안 컨텍스트를 새로 생성한 스레드로 전파하게 도와주는 스프링 시큐리티의 유틸리티 툴
2) 특징
- 반환 값이 없는 작업 실행 후에는 DelegatingSecurityContextRunnable 사용
- 반환 값이 있는 작업 실행 후에는 DelegatingSecurityContext Callable<T>에 해당하는 Callable<T> 대안을 이용
4. DelegatingSecurityContextExecutorService
1) 개념
프레임워크가 모르는 방법으로 코드가 새 스레드를 시작했을 때, 보안 컨텍스트를 새로 생성한 스레드로 전파하게 도와주는 스프링 시큐리티의 유틸리티 툴
2) 특징
- 스레드 풀에서 전파를 관리
- ExecutorService를 장식해 작업을 제출할 때 보안 컨텍스트 세부 정보를 전파
'Spring > security' 카테고리의 다른 글
[시큐리티] 필터 (0) | 2023.03.23 |
---|---|
[시큐리티] 권한과 역할제어 (0) | 2023.03.21 |
[시큐리티] AuthenticationProvider (0) | 2023.03.15 |
[시큐리티] PasswordEncoder (0) | 2023.03.15 |
[시큐리티] UserDetailsService (0) | 2023.03.13 |