框架學習 shiro許可權管理框架基礎

2021-08-11 20:28:27 字數 3043 閱讀 5759

許可權管理實現使用者對系統資源訪問的控制,主要包括兩個部分,認證和授權。認證部分即登陸,有資格進入系統。授權即進入系統之後,只有你被授權的資源你才有資格訪問。舉個例子,教務管理系統,老師的賬號登陸之後,可以檢視所有同學的成績,並進行修改。但是學生的賬號登陸之後,只能看到自己的成績,並不能進行修改等操作,因為沒有被授權。

許可權資訊肯定是放在資料庫之中進行管理的,那我們就得知道什麼樣得許可權模型是好得。

主體(賬號、密碼)

資源(資源名稱

、訪問位址)

許可權(許可權名稱、資源id)

角色(角色名稱)

角色和許可權關係(角色id、許可權id)

主體和角色關係(主體id、角色id)

注:一般資源和許可權是放在同一張表裡面得,什麼樣得許可權能訪問什麼資源(一般也就是請求的url)

授權是shiro最主要的功能,在理解授權之前,我們先要搞清楚幾個概念

2.realm

realm即領域,相當於datasource資料來源,securitymanager進行安全認證需要通過realm獲取使用者許可權資料,比如:如果使用者身份資料在資料庫那麼realm就需要從資料庫獲取使用者身份資訊。

更確切的說是從資料庫中取出資訊和從登陸會話中取出的資訊進行認證和授權。

3.authenticator和authorizer

前者是認證器,對使用者身份進行認證

後者是授權器,判斷使用者是否有對此功能的操作許可權。

4.subject

subject即主體,外部應用與subject進行互動,subject記錄了當前操作使用者,將使用者的概念理解為當前操作的主體

,可能是乙個通過瀏覽器請求的使用者,也可能是乙個執行的程式。subject在shiro中是乙個介面,介面中定義了很多認證授相關的方法,

外部程式通過subject進行認證授,而subject是通過securitymanager安全管理器進行認證授權

理解了之後接下來就是授權流程:

1、對subject進行授權,呼叫方法ispermitted("permission串")

2、securitymanager執行授權,通過modularrealmauthorizer執行授權

3、modularrealmauthorizer執行realm(自定義的customrealm)從資料庫查詢許可權資料

呼叫realm的授權方法:dogetauthorizationinfo

4、realm從資料庫查詢許可權資料,返回modularrealmauthorizer

5、modularrealmauthorizer呼叫permissionresolver進行許可權串比對

6、如果比對後,ispermitted中"permission串"在realm查詢到許可權資料中,說明使用者訪問permission串有許可權,

否則 沒有許可權,丟擲異常。

// 用於認證,

@override

protected authenticationinfo dogetauthenticationinfo(

authenticationtoken token) throws authenticationexception catch (exception e1)

// // 如果查詢不到返回null

//資料庫中使用者賬號是zhangsansan

if(sysuser==null)

//鹽string salt=sysuser.getsalt();

// 模擬從資料庫查詢到密碼

string password = sysuser.getpassword();

// 如果查詢到返回認證資訊authenticationinfo

activeuser activeuser=new activeuser();

activeuser.setuserid(sysuser.getid());

activeuser.setusercode(sysuser.getusercode());

activeuser.setusername(sysuser.getusername());

//..

//根據使用者id取出選單

//通過sevice取出選單

listmenus=null;

try catch (exception e)

//將使用者選單設定到activeuser

activeuser.setmenus(menus);

//將activeuser設定到******authenticationinfo

******authenticationinfo ******authenticationinfo = new ******authenticationinfo(

activeuser, password,bytesource.util.bytes(salt), this.getname());

return ******authenticationinfo;

} // 用於授權

@override

protected authorizationinfo dogetauthorizationinfo(

principalcollection principals) catch (exception e)

//單獨定義乙個集合物件

listpermissions=new arraylist();

if(permissionlist!=null)

}//查到許可權資料,返回授權資訊(要包括 上邊的permissions)

******authorizationinfo ******authorizationinfo = new ******authorizationinfo();

//將上邊查詢到授權資訊填充到******authorizationinfo物件中

******authorizationinfo.addstringpermissions(permissions);

return ******authorizationinfo;

}

4 Shiro框架 許可權管理

當然選擇註解式開發啦,而且還可以用jsp隱藏沒有許可權的標籤,非常方便。在spring中配置的 裡面新增 port,埠 可以通過的埠,如果埠不符,自動跳轉到設定的埠 xx port 80 rest,rest風格 自動根據請求方法構建許可權字串 這個我也沒太懂,要用的話再查查別的 ssl,ssl 只有...

許可權驗證框架Shiro學習(二)

shrio授權,驗證主體subject對當前操作有沒有該許可權 授權,有三種方式 例如,對goods query的訪問需要 good query 許可權 goods query perms goods query 上一節也說了,這個是通過permissionauthorizationfilter進行...

shiro許可權框架與spring框架輕鬆整合

shiro是乙個許可權框架,用於管理 的許可權,大到 登入過濾,小到乙個選單或按鈕是否顯示,shiro學習起來非常簡單,以下是shiro的執行流程圖 subject為當前使用者,當它訪問系統的時候,就會經過securitymanager安全管理器,安全管理器類似乙個中轉站,它實際上會讓realm類來...