티스토리 뷰
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로 전달
참고
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Kotlin
- input
- maven
- 북리뷰
- jQuery
- Spring
- Linux
- intellij
- oracle
- elasticsearch
- window
- Bash tab
- 베리 심플
- springboot
- JavaScript
- config-location
- LocalDateTime
- k8s
- 오라클
- Java
- Spring Security
- Github Status
- mybatis config
- svn
- localtime
- mybatis
- docker
- LocalDate
- Mac
- rocky
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함