AccessDecisionManager
- 인증 정보, 요청정보, 권한정보를 이용해서 사용자의 자원 접근을 허용할 것인지 거부할 것인지 최종 결정하는 주체
- 여러 개의 Voter들을 가질 수 있으며, Voter들로부터 접근허용, 거부, 보류에 해당하는 각각의 값을 리턴 받고 판단 및 결정
- 최종 접근 거부시 예외시킴.
- 접근 결정의 세가지 유형
- AffirmativeBased
- 여러 개의 Voter 클래 중 하나라도 접근 허가로 결론을 내면 접근 허가로 판단
- ConsensusBased
- 다수표(승인 및 거부)에 의해 최종 결정을 판단한다
- 동수일 경우 기본은 접근허가이나 allowEqualGrantedDeniedDecisions를 false로 설정 할 경우 접근 거부로 결정.
- UnanimousBased
- 모든 보터가 만장일치로 접근을 승인해야 하며 그렇지 아니한 경우 접근을 거부
- AffirmativeBased
AccessDecisionVoter
- 판단을 심사하는 클래스
- Voter가 권한 부여 과정에서 판단하는 자료
- Authentication : 인증정보(user)
- FilterInvocation : 요청 정보 (antMatcher("/user")
- ConfigAttributes : 권한 정보 (hasRole("USER"))
- 결정방식
- ACCESS_GRANTED : 접근허용(1)
- ACCESS_DENIED : 접근거부(0)
- ACCESS_ABSTAIN : 접근보류(-1)
Flow
- 유저가 Request 시 FilterSecurityInterceptor가 인가 처리를 수행함.
- AccessDecisionManager가 AccessDecisionVoter에게 권한 판단을 심사함 . 이때 3가지의 정보도 같이 전달함.
- Authentication : 인증정보(user)
- FilterInvocation : 요청 정보 (antMatcher("/user")
- ConfigAttributes : 권한 정보 (hasRole("USER"))
- 그 결과들을 리턴하여 AccessDecisionManager가 최종 결정을 함.
'Backend > Security' 카테고리의 다른 글
JWT - Refresh Token, Access Token (0) | 2023.08.08 |
---|---|
HTTPS, SSL/TLS (0) | 2023.07.17 |
Authorization (인가), FilterSecurityInterceptor (0) | 2023.01.22 |
AuthenticationManager, AuthenticationProvider (0) | 2023.01.22 |
SecurityContextPersistenceFilter (0) | 2023.01.21 |