shrio授權,驗證主體subject對當前操作有沒有該許可權
授權,有三種方式
例如,對goods/query的訪問需要[good:query]許可權
goods/query/** = perms[goods:query]
上一節也說了,這個是通過permissionauthorizationfilter進行過濾,這樣配置好了,怎麼攔截呢,同樣是在我們的realm中,realm中有兩個方法,乙個是認證,認證就是根據token的usercode查詢使用者基本資訊,密碼,選單,等資訊構造乙個******authenticationinfo的bean返回,剩下的就是shiro去驗證了
還有乙個方式是授權,該方法主要是返回改使用者所擁有的許可權,剩下的就是shrio根據上面xml的配置,看請求資源的許可權是否返回的許可權列表中,
// 授權
@override
protected authorizationinfo dogetauthorizationinfo(principalcollection principals)
}******authorizationinfo ******authorizationinfo = new ******authorizationinfo();
******authorizationinfo.addstringpermissions(permissions);
return ******authorizationinfo;
}
這樣就完成了授權驗證,如果沒有該許可權,則跳轉到我們xml定義的unanthorizationurl的頁面,但是這樣授權認證有個缺陷就是每個請求都要配置,這樣比較麻煩,而且每次都要訪問資料庫,就是都要訪問上面**,而該**又訪問資料庫,這樣對效能肯定也會有影響,所以下面的配置方式,要解決上面的配置麻煩,效能問題。
第二種:在方法上加註解
shrio註解方式是比較推薦的,而且配置也很簡單
首先在我們的mvc配置檔案中
開啟spring mvc對類的**,因為我們要在@controller層的方法上加shrio的註解,@controller是類,不是介面,所以要開啟
的配置是把shrio的管理也交給spring管理
例項**:
@requirespermissions("item:query") // shiro註解
}我們只要在該方法上加上個註解,上面的方法表示該方法需要item:query的許可權,很簡單方便,功能等同於上面那種方式在xml裡要加,但很簡單
下面我們要解決下快取的問題:
快取是為了解決我們在驗證授權的時候,頻繁訪問資料庫的情況
配置:
1、新建shiro-cache.xml
3、在securitymanager引入cachemanager bean
這樣就第一次訪問某個請求的時候才會到自定義realm的授權方法,同時還要注意快取的清除
4、清除快取
在自定義的realm重寫
public void clearcached()
在需要清除呼叫的時候清除快取,一般是在許可權修改後呼叫
第三種 jsp標籤
在jsp頁面引入標籤庫
<%@ tagliburi="" prefix="shiro" %>
標籤名稱 標籤條件(均是顯示標籤內容)
登入之後
不在登入狀態時
使用者在沒有rememberme時
使用者在rememberme時
在有abc或者123角色時
擁有角色abc
沒有角色abc
擁有許可權資源abc
沒有abc許可權資源
顯示使用者身份名稱
顯示使用者身份中的屬性值
這個類似我們的el表示式上的邏輯判斷,比如
擁有許可權
日常開發中可以用註解 加 標籤的方式結合使用
框架學習 shiro許可權管理框架基礎
許可權管理實現使用者對系統資源訪問的控制,主要包括兩個部分,認證和授權。認證部分即登陸,有資格進入系統。授權即進入系統之後,只有你被授權的資源你才有資格訪問。舉個例子,教務管理系統,老師的賬號登陸之後,可以檢視所有同學的成績,並進行修改。但是學生的賬號登陸之後,只能看到自己的成績,並不能進行修改等操...
shiro許可權驗證標籤
例項 spring shiro.xml 1 2 3 admin repairtype index roles role admin admin user roles role admin admin complaint list roles role service,role admin jsp頁面...
shiro許可權驗證標籤
例項 spring shiro.xml 1 2 3 admin repairtype index roles role admin admin user roles role admin admin complaint list roles role service,role admin jsp頁面...