Java.lang 패키지에서 제공하는 쓰레드 범위 변수. 쓰레드 수준의 데이터 저장소.
우리가 변수를 선언한다면 그 변수는 scope가 생긴다. 이 scope가 쓰레드 수준에서 공유되도록 하는 것이 ThreadLocal이다.
간단한 예제
public class AccountContext {
private static final ThreadLocal<Account> ACCOUNT_THREAD_LOCAL = new ThreadLocal<>();
public static void setAccount(Account account) {
ACCOUNT_THREAD_LOCAL.set(account);
}
public static Account getAccount() {
return ACCOUNT_THREAD_LOCAL.get();
}
}
AccountContext.setAccount(accountRepository.findByUsername(principal.getName()));
@Service
public class SampleService {
void dashboard() {
Account account = AccountContext.getAccount();
System.out.println("================");
System.out.println(account.getUsername());
}
}
어딘가에서 SecurityContext에 넣어 줄까?