티스토리 뷰

728x90

AccessDecisionManager

  • 인증정보, 요청정보, 권한정보를 이용해서 사용자의 자원접근을 허용할 것인지 거부할 것인지를 최종 결정하는 주체
  • 여러 개의 Voter 들을 가질 수 있으며 Voter 들로부터 접근허용, 거부, 보류에 해당하는 각각의 값을 리턴받고 판단 및 결정
  • 최종 접근 거부 시 예외 발생

AccessDecisionManager는 인터페이스로 이 인터페이스를 구현한 3가지의 구현체가 있다.

접근결정의 세가지 유형

  • AffirmativeBased 
    • 여러개의 Voter 클래스 중 하나라도 접근 허가로 결론을 내면 접근 허가로 판단한다.
    • OR 조건이라고 생각하면 편하다. 기본 구현체이기도하다.

  • ConsensusBased
    • 다수표(승인 및 거부)에 의해 최종 결정을 판단한다.
    • 동수일 경우 기본은 접근허가이나 allowEqualGrantedDeniedDecisions 속성을 false로 설정할 경우 접근거부로 결정된다

  • UnanimousBased
    • 모든 Voter가 만장일치로 접근을 승인해야 하며 그렇지 않은 경우 접근을 거부한다.

AccessDecisionVoter

  • 판단을 심사하는 것 (위원)
  • Voter가 권한 부여 과정에서 판단하는 자료
    • Authentication - 인증 정보(user)
    • FilterInvocation - 요청 정보 (antMatcher("/user"))
    • ConfigAttributes - 권한 정보 (hasRole("USER"))
  • 결정 방식
    • ACCESS_GRANTED: 접근 허용(1)
    • ACCESS_DENIED: 접근 거부(-1)
    • ACCESS_ABSTAIN: 접근 보류(0)
      • Voter가 해당 타입의 요청에 대해 결정을 내릴 수 없는 경우

  • FilterSecurityInterceptor 가 AccessDecisionManager에 인가처리 위임
  • AccessDecisionManager는 자신이 가지고 있는 Voter들에게 정보decide(authentication, object, configAttributes)를 전달한다.
  • Voter들은 정보들을 가지고 권한 판단을 심사한다.
  • 승인,거부,보류 결정방식을 반환하면  AccessDecisionManager에서는 반환받은 결정 방식을 가지고 후처리를 한다.
    • 승인: FilterSecurityInterceptor에 승인여부 반환
    • 거부: AccessDeniedException 예외를 ExceptionTranslationFilter로 전달

참고

https://www.inflearn.com/course/%EC%BD%94%EC%96%B4-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0

 

스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - 인프런 | 강의

초급에서 중.고급에 이르기까지 스프링 시큐리티의 기본 개념부터 API 사용법과 내부 아키텍처를 학습하게 되고 이를 바탕으로 실전 프로젝트를 완성해 나감으로써 스프링 시큐리티의 인증과

www.inflearn.com

 

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함