ps.canDeleteOrder(principal, #orderId)
ps.canEditOrder(principal, #orderId)
hasPermission 來做,其規定了參數的格式必須是 hasPermission(目標物件, 操作動作)、hasPermission(目標ID, 實體型態, 操作動作),很能夠看出其對資源訪問的細粒程度。@PreAuthorize() 時,Spring會將內部的SpEL交由 MethodSecurityExpressionHandler 來解析文字!MethodSecurityExpressionHandler 是介面,因此會藉由 DefaultMethodSecurityExpressionHandler 這個預設實作來解析文字。hasRole、hasAuthority 等解析函式。而 hasPermission 則是委派給 「PermissionEvaluator」來解析。DenyAllPermissionEvaluator,與字面意思相同,就是遇到任何Permission都回傳false。CustomPermissionEvaluator 來實作PermissionEvaluator,並自行設計屬於自己的Permission過濾器,最後再注入Hanlder當中完成註冊。public interface PermissionEvaluator extends AopInfrastructureBean {
boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission);
boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission);
}
本篇文章出自《每天學Java直到今年結束》Day236,大家可以到我的網站上查看~