Spring/Spring

ThreadLocal 과 SpringSecurity

100win10 2020. 8. 9. 14:54

 

ThreadLocal

  • Java.lang 패키지에서 제공하는 스레드 범위 변수이다.
  • 스레드 수준의 데이터 저장소로써 같은 스레드 내에서만 공유한다.
  • 따라서 같은 스레드라면 해당 데이터를 메서드 매개변수로 넘겨줄 필요가 없게 된다.

 

  • 클래스에서 한 변수를 선언한다면 해당 변수의 scope은 해당 클래스가 될 것이다
  • 메서드 안의 변수의 scope은 해당 메서드가 될 것이다.

 

 

  • ThreadLocal에서 변수의 scope은 Thread가 되며 한 스레드 내에서 변수를 공유한다.
  • 요청이 한 쓰레드내에서 사용된다면 파라미터로 전달하지 않아도 된다.

 

 

1.

  • 가져온 유저의 정보를 ThreadLocal을 통해 setAccount에 저장해보자.

 

AccountController.java
SampleService.java

2.

  • SpringSecurityContextHolder에는 Authentication이 담겨있고 이 홀더는 ThreadLocal을 사용하며
  • 어디서나 접근할 수 있도록 해준다고 했다. 우리도 다음과 같이 메서드 파라미터로 받지 않고
  • SecurityContextHolder처럼 ThreadLocal에서 꺼내서 사용하고 있다.

 

 

이렇게 SecurityContextHolder의 기본 전략인 ThreadLocal을 직접 간단하게 만들어보았다.

 

 

참고 : 인프런(백기선) - 스프링 시큐리티