shiro授權的操作主要分為兩個步驟
1、匹配登入使用者的角色,並將許可權賦予當前使用者所建立的subject。
2、訪問某一資源時,從當前使用者subject中取得許可權並驗證是否可以訪問這個資源。
shiro本身並不提供許可權管理的機制,許可權的管理需要我們自己進行維護。常見的做法是在資料庫建立使用者、角色和許可權表進行管理。資料結構類似於下圖
許可權的識別符號(**中匹配許可權的字串)理論上可以自由定義,但是一般情況我們會賦予含義。
例如:「company_add「或「company:add」。前面代表模組後面代表功能。
當乙個使用者成功登陸後,我們會先取得使用者的userid,然後去資料庫中找到對應的角色以及下面的所有許可權。最後將這些許可權存入當前使用者的許可權資訊中,以便訪問資源時使用這些許可權進行比對。
賦予許可權時我們要繼承authorizingrealm類,並實現dogetauthorizationinfo抽象方法。
/**
* 授權
*/@override
protected authorizationinfo dogetauthorizationinfo
(principalcollection principals)
shiro支援通過四種方式進行許可權驗證。
1、**判斷(**級)
使用subject.ispermitted( )方法,驗證是否有許可權,後進行對應的處理。驗證失敗邏輯自己實現。
if
(securityutils.
getsubject()
.ispermitted
("admin_home"))
else
2、使用註解(方法級)
註解方式屬於方法級的許可權控制。使用@requirespermissions註解的方法時會驗證許可權。驗證失敗丟擲org.apache.shiro.authz.authorizationexception異常。
@requirespermissions
("admin_home"
)(value=
"/index"
, method = requestmethod.get)
public string index
(modelmap model)
3、使用標籤(頁面元素級)
使用標籤屬於頁面元素及的許可權控制。訪問被標籤控制的頁面元素時,需要擁有標籤指定的許可權。驗證失敗的的內容在頁面上是隱藏的。
這裡需要注意freemaker是不能直接使用shiro許可權驗證標籤的,如果要使用需要引入shiro-freemarker-tags包,具體方法請參考另一篇博文《shiro快速入門 —— 9.freemaker使用shiro標籤》。
@shiro.haspermission
>
["admin1","admin2","admin3"]
aspermission
>
@shiro.haspermission
>
#list
>
4、***(路徑級)
在***攔截路徑配置時,可以指定許可權***和所需的許可權。當訪問此路徑時進行許可權驗證。驗證失敗會訪問在***工廠類中配置的無許可權提示頁。具體方法可以參考《shiro快速入門 —— 2.***》
map
filterchaindefinitionmap =
newlinkedhashmap
();filterchaindefinitionmap.
put(
"/home1/**"
,"perms[admin1]");
filterchaindefinitionmap.
put(
"/home2/**"
,"perms[admin2]");
filterchaindefinitionmap.
put(
"/home3/**"
,"perms[admin3]");
shirofilte***ctorybean.
setfilterchaindefinitionmap
(filterchaindefinitionmap)
;//設定攔截規則
***工廠類中配置無許可權提示頁。具體方法可以參考《shiro快速入門 —— 2.***》
shirofilte***ctorybean.
setunauthorizedurl
("/common/unauthorized");
//配置沒有許可權跳轉的頁面
Shiro入門(六)Shiro授權
本章講解shiro授權的相關知識 1.概念 authorization 授權,也就是授予使用者訪問某些資源的許可權。前提在於需要使用者通過登入驗證才可以進行授權。許可權 permit 表示某些功能,如按鈕的顯示,選單的訪問,資料的crud 角色 role 許可權的集合,比如管理員角色,其擁有訪問系統...
Shiro快速入門
乙個入門示例 public class inirealmtest test public void testini inirealm示例 配置ini檔案 users lihao 123,admin roles admin user delete public class inirealmtest 自...
Shiro的授權與認證(簡單入門)
先在pom中配置依賴 org.apache.shiro shiro core 1.4.0 junit junit release 新建測試類authenticationtest import org.apache.shiro.securityutils import org.apache.shiro...