AuthorizeTag는 현 인증주체가
특정 GrantedAuthority를 가질 경우
내용을 포함하도록 하는데 사용된다.
다음 JSP 코드는 AuthorizeTag의 사용법을 보여준다:
<authz:authorize ifAllGranted="ROLE_SUPERVISOR">
<td>
<A HREF="del.htm?id=<c:out value="${contact.id}"/>">Del</A>
</td>
</authz:authorize> 이 태그는 인증 주체가 ROLE_SUPERVISOR로 허가되었다면
태그의 본문을 출력하게 할 것이다.
authz:authorize 태그는 다음 속성들을 선언한다:
ifAllGranted: 태그가 자신이 포함하고 있는 내용을
출력하기 위해서는 나열된 모든 역할들이 허가되어야만 한다.
ifAnyGranted: 태그가 자신이 포함하고 있는 내용을
출력하기 위해서는 나열된 역할들 중 어떤 것이라도 허가되어야만 한다.
ifNotGranted: 태그가 자신이 포함하고 있는 내용을
출력하기 위해서는 나열된 역할들 중 허가받은 것이 아무것도 없어야 한다.
여러분은 각 속성에 대해 여러 개의 역할들을 나열할 수 있다는 것을 알게 될 것이며,
단순히 콤마(,)를 이용하여 역할들을 분리한다. authorize 태그는
속성 안에 포함된 공백을 무시할 것이다.
태그 라이브러리는 그것의 모든 매개변수들에 논리적인 AND 연산을 수행한다.
이는 여러분이 두 개 이상의 속성들을 조합할 경우 태그의 본문을 출력하기 위해서는
모든 속성들이 참이어야 함을 의미한다.
ifNotGranted="ROLE_SUPERVISOR"에 이어서
ifAllGranted="ROLE_SUPERVISOR"를 추가하지는 않도록 한다.
그렇지 않으면 여러분은 태그의 본문이 보이지 않아 놀라게 될 것이다.
모든 속성들이 true를 반환하게 함으로써 인증 태그는
여러분이 좀 더 복잡한 인증 시나리오를 만들 수 있도록 해준다.
예를 들어 여러분은 동일한 태그 내에
ifAllGranted="ROLE_SUPERVISOR"와
ifNotGranted="ROLE_NEWBIE_SUPERVISOR"를 선언하여
신규 관리자가 태그 본문을 보는 것을 막을 수 있다. 그러나 설계상에 NOT 조건을
삽입하는 것 보다는 ifAllGranted="ROLE_EXPERIENCED_SUPERVISOR"을
사용하는 것이 말할 것도 없이 더 간단하다.
마지막 항목: 태그는 특정 순서로 인증을 검증한다:
가장 먼저 ifNotGranted를,
다음으로는 ifAllGranted를,
마지막으로는 AnyGranted를 검증한다.
현 인증주체가 도메인 객체를 가리키는 ACL을 가질 경우에는
AccessControlListTag을 이용하여 내용을 삽입한다.
다음의 JSP 코드는 AccessControlListTag의 사용법을 보여준다:
<authz:accesscontrollist domainObject="${contact}" hasPermission="8,16">
<td><A HREF="<c:url value="del.htm"><c:param name="contactId" value="${contact.id}"/></c:url>">Del</A></td>
</authz:accesscontrollist>이 태그는 인증 주체가 "contact" 도메인 객체에 대해 16번 권한이나 1번 권한을
갖고 있을 경우 태그의 내용을 출력하도록 한다. 앞서의 숫자들은 실제로는 정수형이며
BasePermission 비트 마스킹을 통해 사용된다.
Acegi Security의 ACL 기능에 관해 좀 더 알아보려면 참조 가이드의
ACL 섹션을 참조하도록 한다.
AclTag는 기존 ACL 모듈의 일부이며 비추천되어야 한다.
이전에 만들어진 참조를 위해 AclTag는
AccessControlListTag와 정확히 동일하게 작동한다.