AccessDecisionManager, AccessDecisionVoter

AccessDecisionManager

  • 인증 정보, 요청정보, 권한정보를 이용해서 사용자의 자원 접근을 허용할 것인지 거부할 것인지 최종 결정하는 주체
  • 여러 개의 Voter들을 가질 수 있으며, Voter들로부터 접근허용, 거부, 보류에 해당하는 각각의 값을 리턴 받고 판단 및 결정
  • 최종 접근 거부시 예외시킴. 
  • 접근 결정의 세가지 유형
    • AffirmativeBased 
      • 여러 개의 Voter 클래 중 하나라도 접근 허가로 결론을 내면 접근 허가로 판단
    • ConsensusBased 
      • 다수표(승인 및 거부)에 의해 최종 결정을 판단한다 
      • 동수일 경우 기본은 접근허가이나 allowEqualGrantedDeniedDecisions를 false로 설정 할 경우 접근 거부로 결정.
    • UnanimousBased
      • 모든 보터가 만장일치로 접근을 승인해야 하며 그렇지 아니한 경우 접근을 거부 

 

 


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