AccessDecisionManager
- 인증 정보, 요청 정보, 권한 정보를 기반으로 사용자의 리소스 접근 허용 또는 거부를 최종 결정하는 엔터티
- 다수의 투표자를 가질 수 있으며 액세스 권한, 거부 및 보류에 해당하는 각 값이 반환되고 투표자가 판단하고 결정합니다.
- 최종 액세스가 거부되면 예외 발생
AccessDecisionManager는 인터페이스이며 이 인터페이스를 구현하는 세 가지 구현이 있습니다.
액세스 결정의 세 가지 유형
- 긍정 기반
- 여러 유권자 등급 중 하나라도 입국 허가를 받은 경우 이는 입국 허가로 간주됩니다.
- 이것을 OR 조건으로 생각하면 편리합니다.
또한 기본 구현입니다.
- 여러 유권자 등급 중 하나라도 입국 허가를 받은 경우 이는 입국 허가로 간주됩니다.
- 합의 기반
- 다수결(승인 및 거부)로 최종 결정이 결정됩니다.
- 같은 숫자일 경우 기본적으로 접근이 허용되지만 allowEqualGrantedDeniedDecisions 속성이 false로 설정되어 있으면 접근이 거부된다.
- 다수결(승인 및 거부)로 최종 결정이 결정됩니다.
- 만장일치 기반
- 투표권이 있는 모든 사람은 액세스에 만장일치로 동의해야 하며, 그렇지 않으면 액세스가 거부됩니다.
- 투표권이 있는 모든 사람은 액세스에 만장일치로 동의해야 하며, 그렇지 않으면 액세스가 거부됩니다.
AccessDecisionVoter
- 평결을 조사하다 (위원)
- 승인 과정에서 유권자가 결정한 데이터
- 인증 – 인증 정보(사용자)
- FilterInvocation – 요청 정보(antMatcher(“/user”))
- ConfigAttributes – 인증 정보(hasRole(“USER”))
- 결정 방법
- ACCESS_GRANTED: 액세스 권한 부여됨(1)
- ACCESS_DENIED: 액세스 거부됨(-1)
- ACCESS_ABSTAIN: 접근 차단(0)
- 유권자는 이러한 유형의 발의에 대해 결정을 내릴 수 없습니다.
- 유권자는 이러한 유형의 발의에 대해 결정을 내릴 수 없습니다.
- FilterSecurityInterceptor는 인증 처리를 AccessDecisionManager에 위임합니다.
- AccessDecisionManager는 정보 결정(인증, 객체, 구성 속성)을 보유한 투표자에게 전달합니다.
- 유권자는 정보로 권위의 판단을 판단합니다.
- 승인, 거부 또는 잠금 결정 방법이 반환되면 AccessDecisionManager는 반환된 결정 방법에 대해 사후 처리를 수행합니다.
- Acknowledgement: FilterSecurityInterceptor에 인증을 반환할지 여부
- 거부됨: ExceptionTranslationFilter에 대한 AccessDeniedException 발생
참조