#6.3 服務器端方法級權限控制 在服務器端我們可以通過Spring security提供的注解對方法來進行權限控制。Spring Security在方法的權限控制上 支持三種類型的注解,JSR-250注解、@Secured注解和支持表達式的注解,這三種注解默認都是沒有啟用的,需要 單獨通過global-method-security元素的對應屬性進行啟用
##6.3.1.開啟注解使用 配置文件 ```
##6.3.2.JSR-250注解 
@RolesAllowed表示訪問對應方法時所應該具有的角色
示例:
@RolesAllowed({"USER", "ADMIN"}) 該方法只要具有"USER", "ADMIN"任意一種權限就可以訪問。這里可以省
略前綴ROLE_,實際的權限可能是ROLE_ADMIN
@PermitAll表示允許所有的角色進行訪問,也就是說不進行權限控制
@DenyAll是和PermitAll相反的,表示無論什么角色都不能訪問
6.3.3.支持表達式的注解

@PreAuthorize 在方法調用之前,基於表達式的計算結果來限制對方法的訪問
示例:
@PreAuthorize("#userId == authentication.principal.userId or hasAuthority(‘ADMIN’)")
void changePassword(@P("userId") long userId ){ }
這里表示在changePassword方法執行之前,判斷方法參數userId的值是否等於principal中保存的當前用戶的
userId,或者當前用戶是否具有ROLE_ADMIN權限,兩種符合其一,就可以訪問該方法。
@PostAuthorize 允許方法調用,但是如果表達式計算結果為false,將拋出一個安全性異常
示例:
@PostAuthorize
User getUser("returnObject.userId == authentication.principal.userId or
hasPermission(returnObject, 'ADMIN')");
@PostFilter 允許方法調用,但必須按照表達式來過濾方法的結果
@PreFilter 允許方法調用,但必須在進入方法之前過濾輸入值
6.3.4.@Secured注解

@Secured注解標注的方法進行權限控制的支持,其值默認為disabled。
示例:
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account readAccount(Long id);
@Secured("ROLE_TELLER")
6.4 頁面端標簽控制權限
在jsp頁面中我們可以使用spring security提供的權限標簽來進行權限控制

##6.4.1.導入 maven導入 ```
##6.4.2.常用標簽 在jsp中我們可以使用以下三種標簽,其中authentication代表的是當前認證對象,可以獲取當前認證對象信息,例 如用戶名。其它兩個標簽我們可以用於權限控制 ###6.4.2.1 authentication ```
注意:使用authorize ,spring-security.xml 配置文件中,配置具體的規則,必須使用SPEL表達式的寫法,如下圖所示

6.4.2.3 accesscontrollist
accesscontrollist標簽是用於鑒定ACL權限的。其一共定義了三個屬性:hasPermission、domainObject和var,
其中前兩個是必須指定的
<security:accesscontrollist hasPermission="" domainObject="" var=""></security:accesscontrollist>
hasPermission:hasPermission屬性用於指定以逗號分隔的權限列表
domainObject:domainObject用於指定對應的域對象
var:var則是用以將鑒定的結果以指定的屬性名存入pageContext中,以供同一頁面的其它地方使用
