Written on
·
203
0
https://thecodinglog.github.io/spring/security/2018/06/12/spring-security-4.html
이링크를 보게 되었는데요.
상태 비 저장 RESTful 웹 서비스
HTTP 세션을 사용하지 않고 모든 요청에 대해 다시 인증한다. 그러나 각 요청 후에 SecurityContextHolder
가 지워지도록 SecurityContextPersistenceFilter
가 체인에 포함되는 것이 중요하다.
라는 내용이 있고
단일 세션에서 동시에 요청을 받는 응용 프로그램에서 동일한 SecurityContext
인스턴스가 스레드간에 공유된다.
ThreadLocal
를 사용하고 있지만 각 스레드에서는 HttpSession
에서 인스턴스를 가져오기 때문에 동일한 인스턴스를 반환한다. 만약에 한 스레드에서 임시로 컨텍스트를 바꾸기를 원하는 경우 주의해야 한다. SecurityContextHolder.getContext()
로 컨텍스트를 가져오고 setAuthentication(anAuthentication)
을 호출하면 같은 SecurityContext
인스턴스를 사용하고 있는 모든 현재 스레드에 있는 정보까지 다 같이 바뀌게 된다.
SecurityContextPersistenceFilter
를 커스터마이징하면 요청 마다 완전히 새로운 SecurityContext
를 반환하게 할 수 있다. 이 방법으로 한 스레드에서 생긴 변경이 다른 스레드로 전파되지 않도록 할 수 있다. 또 다른 방법은 SecurityContextHolder.createEmptyContext()
메서드를 호출하여 임시적으로 컨텍스트를 만들 수도 있다.
이내용 같은데 .. 혹시 이게 맞을까요?..
제 과거 질문들입니다.
https://www.inflearn.com/questions/565980
https://www.inflearn.com/questions/572566
저 방법으로 해소를 시도를 먼저 진행해보겠습니다..
RESTAPI여서 생긴 문제인지 그게 궁금합니다.
Answer 1
0
네
https://www.inflearn.com/questions/565980
에서 제가 말씀 드린 답변을 보시면 위의 내용과 동일한 의미로 설명한 내용들이 있습니다.\
"다만 전제 조건이 있다면 securityContext 가 최종적으로는 세션에 저장되기 때문에 만약 동일계정의 여러명이 동일한 세션을 공유하고 있다면 securityContext 를 공유할 수 는 있지만 정상적인 상황에서는 발생할 수 없는 경우라 볼 수 있습니다."
"같은 계정 로그인시 동일한 context 가 생성이 된다면의 전제조건은 같은계정을 로그인하는 사용자들의 세션쿠키가 다 동일해야 함을 의미합니다.