인증 섹션에서 간략하게 언급했듯이 모든 Authentication 구현체들은
GrantedAuthority 객체의 배열을 저장할 필요가 있다.
이러한 GrantedAuthority 객체의 배열은 인증 주체에
허용된 권한들을 나타낸다. GrantedAuthority 객체는
AuthenticationManager에 의해
Authentication 객체에 삽입되며 차후에 권한부여에 관한
의사결정을 할 경우 AccessDecisionManager에 의해 읽어들여진다.
GrantedAuthority는 다음의 메소드만을 포함하고 있는 인터페이스이다:
public String getAuthority();
이 메소드는 AccessDecisionManager들이
GrantedAuthority에 대한
정확한 String 표현을 획득하도록 한다.
String 표현으로 반환하므로
GrantedAuthority는 대부분의
AccessDecisionManager들에 의해 손쉽게 "읽혀 들여"질 수 있다.
GrantedAuthority가 정확히 String로
표현되지 못할 경우 GrantedAuthority는 "복합적(complex)"인 것으로
간주될 것이며 getAuthority()메소드는 null을
반환해야 한다.
복합적인 GrantedAuthority의 예는 서로 다른
고객 계좌 번호에 적용되는 오퍼레이션의 목록과 보안 진입점들을
저장하는 구현체를 들 수 있다. 이러한 복합적인
GrantedAuthority를 String으로
표현하는 것은 상당히 복잡할 것이며, 그리고 그 결과
getAuthority() 메소드는
null을 반환해야만 한다.
이는 모든 AccessDecisionManager가
GrantedAuthority의 내용을 이해하기 위해
GrantedAuthority 구현체를 상세하게 지원할 필요가
있음을 나타낸다.
Acegi Security에는 GrantedAuthorityImpl이라는 이름의
GrantedAuthority 구현체가 포함되어 있다.
GrantedAuthorityImpl은 모든 사용자에 특징적인
String이 GrantedAuthority로 변환될 수
있도록 해준다. 모든 AuthenticationProvider에는
Authentication 객체에 정보를 입력하는데 있어
GrantedAuthorityImpl을 이용하는 보안 아키텍처를
포함하고 있다.