1,授權中涉及的一些概念
[1]授權:訪問控制,即在應用中認證用戶能否訪問的系統資源(如一個頁面,一個按鈕等)。
[2]資源:在Web應用中反應為用戶可以訪問的URL。
[3]權限:表示用戶在應用中是否能夠訪問某個資源。
[4]角色:權限的集合。
2,Shiro授權方式
[1]編程式
[2]注解式
[3]jsp/gsp標簽式
3,Shiro默認攔截器
Shiro內置了很多默認的攔截器,比如身份驗證,授權等相關的。默認攔截器可以參考org.apache.web.filter.mgt.DefaultFilter中的枚舉攔截器。
4,Shiro授權流程
[1]授權需要繼承 AuthorizingRealm 類(該類繼承自 AuthenticationRealm 類),並重寫其 doGetAuthorizationInfo() 方法。



[2]多Realm授權的通過標准,多Realm應用下,使用ModularRealmAuthorizer授權器,只要有一個Realm授權就算通過。在ModularRealmAuthorizer循環授權的時候,還是走的第[1]條的流程,所以不用擔心。

############################### Shiro jsp標簽庫 ##########################################
Shiro 提供了JSTL標簽用於在JSP/GSP頁面進行權限控制,如根據認證用戶相應的頁面按鈕。
首先,需要導入標簽庫:
<%@ taglib uri="http://org.apache.shiro/tags" uri="shiro" %>
1,guest標簽
游客登陸時,顯示標簽體內的內容。
2,authenticated標簽
用戶認證通過,顯示標簽體內的內容。
3,noAuthenticated標簽
用戶未通過認證(包括【記住我】方式登陸),顯示標簽體內的內容。
4,principal標簽
顯示用戶身份信息,如果realm傳遞的principal是一個對象,可以使用該標簽的property來顯示具體屬性的值。
5,hasRole和hasAnyRoles
擁有指定的角色,顯示標簽體內的內容。
6,lacksRole
沒有指定的角色,顯示標簽體內的內容。
7,hasPermissioin和hasAnyPermissions
擁有指定的權限,顯示標簽體內的內容。
8,lacksPermission
沒有指定的角色,顯示標簽體內的內容。
############################### Shiro 注解 ##########################################
shiro注解用在Service和Controller層,但是如果Service層有事物注解,那么shiro注解要放在Controller層。因為兩個代理對象在類型轉換時會出現異常。
1,RequiresAuthentication
要求用戶已經被認證過。
2,RequiresGuest注解
要求訪客才能訪問。
3,RequiresPermissions
要求擁有指定的權限。
4,RequiresRoles
要求擁有指定的角色。
如果達不到注解所需要的要求,會拋出異常。