springframework/시작하자SpringSecurity

23.AccessDesicionManager, AccessDecisionVotor

Jungsoomin :) 2020. 9. 22. 23:53

AccessDecisionManager

 

  • 인증정보 , 요청정보, 권한정보 를 이용해서 사용자자원접근 허가여부를 결정하는 주체

  • 여러개의 Votor 를 가지며 Votor 들에게 허용, 거부 , 보류 값을 각각 리턴받아 판단, 결정한다.

  • 접근 거부시 AccessDeniedException을 발생


AcceessDesicionManager 의 접근 결정 유형에 따른 구현객체

 

  • AffermativeBased : Votor 클래스 중 하나라도 접근 허가를 내면 접근 허가

  • ConsensusBased : 다수표에 의해 판단, 동수일경우 default 값은 허가이며, allowIfEqualGrantedDeniendDecisions 속성을 false 로 주면 접근 거부 설정

  • UnanimousBased : 하나의 Votor 라도 접근불가접근 거부


AccessDecisionVotor

 

  • 판단을 심사하는 위원

  • 판단자료를 근거하여 결정 방식을 내린다.

판단자료

  1. Authentication : 인증정보 , User 객체

  2. FilterInvocation : 요청정보, antMatchers("/user")

  3. ConfigAttributes : 권한정보, (hasRole("USER"))

결정 방식

  1. ACCESS_GRANTED : 접근 허용 (1)

  2. ACCESS_DENIED : 접근 거부 (-1)

  3. ACCESS_ABSTRAIN : 접근 보류 (0)

  • ACCESS_ABSTRAIN Votor 클래스가 해당 타입의 요청에 대해 결정을 내릴 수 없는 경우 판단한다.


AccessDecisionManager 와 AccessDecisionVotor 의 동작 과정

 

 

  1. FilterSecurityInterceptor 동작 후 Authentication 존재여부 확인, 존재 시 AccessDescisionManager 호출

  2. AccessDecisionManagerdecide(authentication, object, configAttributes) 실행, 각 매개 값은 판단자료인증객체, 요청경로,권한정보.

  3. AccessDecisionVotor 클래스들 호출.

  4. AccessDecisionVotor 심의를 하고 ACCESS_GRANTED , ACCESS_DENIED, ACCESS_ABSTRAIN 등의 심의 결과를 반환

  5. AccessDecisionManager심의 결과를 받아 판단

  6. ACCESS_GRANTED 로 판단이 났을 경우 FilterSecurityInterceptor허가 요청

  7. ACCESS_DENIED 로 판단이 났을 경우 AccessDeniedException 발생, ExceptionTranslationFilter 가 이를 처리 함.