이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다.
AccessDecisionManager
- 인증 정보, 요청 정보, 권한 정보를 이용해 사용자의 자원접근을 허용할 것인지 거부할 것인지를 최종 결정하는 주체
- 여러 개의 Voter 들을 가질 수 있으며 Voter 들로부터 접근 허용, 거부, 보류에 해당하는 각각의 값을 리턴 받고 판단 및 결정한다.
- 최종 접근 거부 시 에외가 발생한다.
접근 결정의 세 가지 유형
- AffirmativeBased
- 여러 개의 Voter 클래스 중 하나라도 접근 허가로 결론을 내면 접근 허가로 판단한다.
- ConsensusBased
- 다수표(승인 및 거부)에 의해 최종 결정을 판단한다.
- 동수일 경우 기본은 접근허가이나 allowIfEqualGrantedDeniedDecision을 flase로 설정할 경우 접근거부로 결정된다.
- UnanimousBased
- 모든 Voter가 만장일치로 접근을 승인해야 하며 그렇지 않은 경우 접근을 거부한다.
AccessDecisionVoter
- 판단을 심사하는 것 (위원)
- Voter가 권한 부여 과정에서 판단하는 자료
- Authentication - 인증 정보 (user)
- FilterInvocation - 요청 정보 (antMatcher("/user"))
- ConfigAttributes - 권한 정보 (hasRole("USER"))
- 결정 방식
- ACCESS_GRANTED : 접근 허용(1)
- ACCESS_DENIED : 접근 거부(-1)
- ACCESS_ABSTAIN : 접근 보류 (0)
- Voter가 해당 타입의 요청에 대해 결정을 내릴 수 없는 경우
AccessDecisionManager, AccessDecisionVoter
흐름
응용
'스프링 시큐리티 > 스프링 시큐리티 주요 아키텍처 이해' 카테고리의 다른 글
스프링 시큐리티 필터 및 아키텍처 정리 (0) | 2023.02.10 |
---|---|
인가 개념 및 필터 이해: Authorization, FilterSecurityInterceptor (0) | 2023.02.10 |
인증 처리자 - AuthenticationProvider (0) | 2023.02.08 |
인증 관리자: AuthenticationManager (0) | 2023.02.08 |
인증 흐름 이해 - AuthenticationFlow (0) | 2023.01.31 |