前面討論過,Web應用的安全管理,主要包括兩個方面的內容,一個是用戶身份的認證,即用戶登陸的設計,二是用戶受權,即一個用戶在一個應用系統中可以執行哪些操做的權限管理。前面介紹了登陸,下面簡單介紹一下用戶受權。用戶擁有的權限是根據用戶的角色來決定的,而且security中,用戶的權限能夠控制到方法級別。html
每一個url的訪問都是定義在controller方法上面的,所以須要配置方法權限。開啓方法級別的權限,須要引入@EnableGlobalMethodSecurity註解:git
註解中有三個參數,securedEnabled = true 表示方法權限控制可使用安全註解 @Secured, 該註解的值 必須在現有的角色名稱前加上ROLE_前綴,如 @Secured("ROLE_ADMIN"),多個角色能夠這樣寫 @Secured({"ROLE_ONE","ROLE_TWO"}),表示最少有其中一個角色才能訪問。spring
prePostEnabled = true 表示方法權限前置註解 @PreAuthorize,@PostAuthorize啓用,註解 @PreAuthorize 適合進入方法以前驗證受權。 @PreAuthorize能夠兼顧,角色/登陸用戶權限,參數傳遞給方法等等 ,@PreAuthorize("true") 表示容許全部訪問,註解 @PostAuthorize 不常常使用,它在檢查受權方法以後才被執行,因此它適合用在對返回的值做驗證受權。Spring EL提供可在表達式語言來訪問並從方法返回 returnObject 對象來反映實際的對象。@PreAuthorize單個角色能夠這樣寫 @PreAuthorize("hasRole('TWO')"),多個角色能夠這樣寫 @PreAuthorize("hasRole('ONE') AND hasRole('TWO')"),@PreAuthorize("hasRole('ONE') OR hasRole('TWO')")注意and和or的意義。AND表示擁有全部權限才能訪問,OR表示擁有任意一種權限就能訪問。安全
jsr250Enabled = true 表示 啓動了JSR-250的註解支持,在方法上使用註解來控制訪問權限,註解@DenyAll 拒絕全部訪問,註解 @PermitAll 容許全部訪問,註解 @RolesAllowed({"USER", "ADMIN"}) 該方法只要具備"USER", "ADMIN"任意一種權限就能夠訪問。這裏能夠省略前綴ROLE_,實際的權限多是ROLE_ADMIN。spring-boot
咱們在內存中新建三個用戶,分別是 one/one,two/two,three/three,他們三個的角色分別是 ONE,TWO,THREE,測試
三個用戶,分別擁有三個不一樣的角色,下面新建三個頁面,分別賦予三個角色權限:url
三個方法的權限註解分別使用了三種方式賦予角色。下面咱們登陸one,查看效果,one頁面是能夠訪問的:spa
two頁面禁止訪問:設計
顯示403,forbidden。three頁面也是同樣:htm
其它兩個用戶能夠自行登陸測試。
前面介紹登陸成功處理器,用戶權限不足的狀況也能夠統一進行處理,讓權限不足的狀況下,跳轉到同一個頁面。下面新建類 AuthLimitHandler,實現AccessDeniedHandler接口:
/limit頁面能夠本身建立,完成後,在配置類中配置權限不足處理器:
重啓訪問,就能夠看處處理效果:
代碼地址:https://gitee.com/blueses/spring-boot-security 06
原文出處:https://www.cnblogs.com/guos/p/11609723.html