programing

Spring Security의 SecurityContextHolder: 세션 또는 요청 바인딩?

muds 2023. 9. 3. 16:38
반응형

Spring Security의 SecurityContextHolder: 세션 또는 요청 바인딩?

검색하는 사용자 주체입니다.SecurityContextHolder요청 또는 세션에 바인딩됩니까?

UserPrincipal principal = (UserPrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

이것은 현재 로그인한 사용자에게 접근하는 방법입니다.현재 세션이 삭제되면 무효화됩니까?

구성 방법에 따라 다릅니다(예: 다른 동작을 구성할 수 있음).

웹 응용 프로그램에서 와 상호 작용하는 를 사용합니다.

의 Java 문서SecurityContextPersistenceFilter다음으로 시작:

요청 전에 구성된 {@link SecurityContextRepository}에서 가져온 정보로 {@linkSecurityContextHolder}을(를) 채우고 요청이 완료되고 컨텍스트 홀더를 지우면 이를 다시 저장소에 저장합니다.기본적으로 {@link HttpSessionSecurityContextRepository}을(를) 사용합니다.HttpSession 관련 구성 옵션에 대한 내용은 이 클래스를 참조하십시오.

Btw: HttpSessionSecurityContextRespository는 SecurityContextRespository의 유일한 구현입니다(기본 libs에서 찾았습니다).

다음과 같이 작동합니다.

  • 는 httpSession(Key=")을 사용합니다.SPRING_SECURITY_CONTEXE")를 저장합니다.SecurityContext물건.
  • SecurityContextPersistenceFilter를 사용하는 필터입니다.SecurityContextRepository예를 들어HttpSessionSecurityContextRepository적재 및 저장SecurityContext물건들.HttpRequest가 필터를 통과하면 필터는 다음을 얻습니다.SecurityContext저장소에서 SecurityContextHolder(SecurityContextHolder)에 저장합니다.SecurityContextHolder#setContext)
  • SecurityContextHolder두 가지 방법이 있습니다.setContext그리고.getContext둘 다 a를 사용합니다.SecurityContextHolderStrategyset- 및 get-Context 메서드에서 정확히 수행되는 작업을 지정합니다. - 예를 들어,ThreadLocalSecurityContextHolderStrategy로컬 스레드를 사용하여 컨텍스트를 저장합니다.

그래서 요약하자면:사용자 주체(SecurityContext 요소)는 HTTP 세션에 저장됩니다.각 요청에 대해 액세스하는 로컬 스레드에 저장됩니다.

언급URL : https://stackoverflow.com/questions/6408007/spring-securitys-securitycontextholder-session-or-request-bound

반응형