2013年1月9日 星期三

Spring Security 3.1.x AccessControlListTag 詳解

Spring Security提供了taglibs,讓我們在JSP裡面可以很容易依據權限來決定畫面是否顯示某些重要的區塊。
例如:
代碼:
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %>
<%@ taglib uri="/struts-jquery-tags" prefix="sj" %>

<sec:accesscontrollist hasPermission="NORMAL" domainObject="ACM_P_DEPT_QRY">
    <sj:tab id="departmentTab" target="departmentTabDiv" label="%{getText('company.tabs.departmentTab')}" />
</sec:accesscontrollist>
但是這樣還不夠,依據AccessControlListTag的說明,還得在Spring ApplicationContext中提供PermissionEvaluator instance,Spring Security官方提供了兩個Implementing Classes,分別是AclPermissionEvaluatorDenyAllPermissionEvaluator,但通常我們還是自己implement所需要的權限判斷邏輯,而AccessControlListTag裡面只會呼叫以下這個method,另一個method不需要特別實作。
代碼:
boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission)
對了,PermissionEvaluator雖然在Spring Security 3.0就有了,但是AccessControlListTag裡面是3.1之後才開始使用它,這裡所講的方法在Spring Security 3.0並不適用。