Spring Security - AccessDecisionManager, AccessDecisionVoter

2021. 4. 17. 23:24SPRING/SPRING SECURITY

인가 플로우

AccessDecisionManager

  • 자원을 요청한 사용자가 해당 자원에 접근을 허용할지 결정하는 주체.
  • 여러 Voter를 가지고 있고, Voter에 요청한 사용자가 자원에 접근해도 괜찮은지 투표를 진행하여, 투표 결과에 따라 접근 허용을 결정한다.
  • 접근 결정에 세 가지 유형이 있다.
  • AffirmativeBased: 여러 개의 Voter 중에 하나의 Voter가 접근 허용을 리턴하면 접근 허용으로 결정.
  • ConsensusBased: 다수표에 의해 결정. 만약 허용과 거부의 수가 같으면 기본값은 접근 허용이나, allowIfEqualGrantedDeniedDecisions을 false로 설정할 경우 접근 거부가 된다.
  • UnanimousBased: 모든 Voter가 접근 허용을 리턴해야지만 접근 허용으로 결정한다.

AccessDecisionVoter

  • 요청 사용자에게 자원 접근을 허용해야할지 심사한다.
  • AccessDecisionManager로 부터 다음 세 가지의 판단 자료를 토대로 심사한다.
  • Authentication - 인증 정보(user)
  • FilterInvocation 요청 정보 (antMatcher("/user"))
  • ConfigAttributes - 권한 정보 (hasRole("USER"))
  • 결정방식
  • ACCESS_GRANTED : 접근허용(1)
  • ACCESS_DENIED : 접근 거부(0)
  • ACCESS_ABSTAIN : 접근 보류(-1)