SpringSecurity 학습(23) -- AccessDecisionManager, AccessDecisionVoter

carlkim·2023년 10월 31일

스프링시큐리티학습

목록 보기
23/24

AccessDecisionManager 클래스

-- 인증 정보, 요청 정보, 권한정보 세 가지 파라메터를 전달 받아
현재 사용자가 해당 자원에 접근을 허용할 것인지 거부할 것인지 결정하는 클래스 최종 결정하는 클래스이다

-- 여러개의 voter 클래스를 가질 수 있다.

-- 자원 접근에 대한 허용, 거부, 보류에 해당하는 리턴을 받고 판단 및 결정

-- 최종 접근 거부 시 예외 발생

-- 접근 결정의 세 가지 유형
1) AffirmativeBased
여러개의 Voter 클래스 중 하나라도 접근 허가로 결론을 내면 접근 허가로 판단한다

2) ConsensusBased
-- 다수표(승인 및 거부)에 의해 최종 결정을 판단
-- 동수일 경우 기본은 접근허가나 allowlfEqualGrantedDeniedDecisions를 false로 설정할 경우 접근 거부로 결정된다.

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

--------------- AccessDecisionVoter -------------

실질적으로 사용자 요청에대해서 자원에 접근할 자격이 있는지 판단하는 위원.

Voter가 권한 부여 과정에서 판단하는 자료
1. Authentication - 인증 정보(user)
2. FilterInvocation - 요청 정보(requestMatcher("/user"))
3. ConfigAttributes - 권한 정보(hasRole("USER"))

결정 방식
-- ACCESS_GRANTED : 접근 허용
-- ACCESS_DENIED : 접근 거부
-- ACCESS_ABSTAIN : 접근 보류
-- Voter가 해당 타입의 요청에 대해 결정으 내릴 수 없는 경우

-----------------작동 순서------------------

  1. FilterSecurityInterceptor가 AccessDecisionManager에게 인가처리를 맡긴다

  2. FilterSecurityInterceptor가 AccessDecisionManager에게 세가지 정보 파라메터를 넘긴다
    [authentication, object, configAttributes)

  3. AccessDecisionManager는 인증 정보, 요청 정보, 권한 정보를 넘기면서 AccessDecisionVoter 에게 권한 판단 심사를 맡긴다.

  4. AccessDecisionVoter들은 이 값들을 바탕으로 허용 또는 금지, 보류 결정을 리턴한다.

  5. 거부가 되면? ACCESS_DENIED 결정 EXCEPTIONTRANSLATIONFILTER가 예외처리한다.

profile
기본부터 가면 됩니다.

0개의 댓글