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를 사용합니다.SecurityContextHolderStrategy
set- 및 get-Context 메서드에서 정확히 수행되는 작업을 지정합니다. - 예를 들어,ThreadLocalSecurityContextHolderStrategy
로컬 스레드를 사용하여 컨텍스트를 저장합니다.
그래서 요약하자면:사용자 주체(SecurityContext 요소)는 HTTP 세션에 저장됩니다.각 요청에 대해 액세스하는 로컬 스레드에 저장됩니다.
언급URL : https://stackoverflow.com/questions/6408007/spring-securitys-securitycontextholder-session-or-request-bound
'programing' 카테고리의 다른 글
이 HTML에서 3D는 무엇을 하고 있습니까? (0) | 2023.09.03 |
---|---|
모든 agax.load() 요청이 완료된 후 기능 실행 (0) | 2023.09.03 |
JQuery에서 "onclick"을 제거하는 방법은 무엇입니까? (0) | 2023.09.03 |
선택 후 부트스트랩 날짜 선택기 숨기기 (0) | 2023.09.03 |
PowerShell - 복사 항목 '폴더가 이미 있습니다' 오류 표시 안 함 (0) | 2023.09.03 |