Shiro實戰以及源碼解析

一、明白什麼是認證和授權

從百度百科上理解的,感覺非常通俗易懂

你要登機,你需要出示你的 passport 和源 ticket,passport 是爲了證明你張三確實是你百張三,這就是 認證;而機票是爲了證明你張三確實買度了票可以上飛機,這就是 授權。


二、shiro的概念
1.什麼是shiro

2.shiro的特性


3.shiro的核心組件


三、shiro實戰debug解析(token是用戶輸入的,info是從緩存和數據庫中查出來的,
認證主要做token和info中密碼的判等;授權主要是將註解上的權限或者角色與從數據庫中查出來的權限做判等)

1.首先先配置一個Realm類

1.1 然後配置認證的方法,因爲配置了攔截路徑,所以當用戶調用sub.login(token)的方法的時候


會先去AuthenticatingRealm類中調用getAuthenticationInfo方法,如下圖所示

 

之後開始回調實現類也就是咱自己實現的doGetAuthenticationInfo這個方法,方法的邏輯大致是獲取用戶輸入框中
輸入的token中的principal,然後根據principal去數據庫或者緩存中查相應的用戶的信息。之後將token中的principal
以及數據庫中查詢到的password還有自己實現的AuthRealm類的全路徑傳入到authenticationInfo對象中去,如下圖所示

構造完之後返回info對象,接着走下邊的assertCredentialsMath方法(),如下圖所示


assertCredentialsMath方法()裏邊會針對token(用戶輸入的要驗證的“用戶”)以及info(從數據庫裏邊查的實際的“用戶”)裏邊的密碼進行校驗,如果對比成功則返回true


1.2 然後配置授權的方法,也就是說當調用到具體方法的時候會去回調這個方法

2.然後配置ShiroConfig類


2.1首先配置SecurityManager類,一般都是這幾行代碼,其中的入參就是第一步配的那個AuthRealm


2.2然後配置shiro的過濾規則,其中入參就是上一步配置的SecurityManager。裏邊分別都是登錄路徑(如果不設置默認會自動尋找Web工程根目錄下的"/login"頁面),
認證成功後的路徑以及沒有認證的路徑

2.3 配置Filter的權限控制規則


3.之後配置/login的登陸的認證,劃紅線的都是重點,裏邊首先生成一個Subject對象,然後生成touken,並且利用
這個token傳入到sub.login方法中,這個方法會將token傳到SecurityManager,SecurityManager然後傳給AuthRealm
的認證方法doGetAuthenticationInfo,之後這個方法裏邊開始校驗賬號和密碼的邏輯,並且利用XXXMatcher方法校驗。

4.校驗通過後,可以成功登錄到success頁面,形成一個閉環

5.用戶開始進行相關操作,比如進行查詢操作,上邊的有註解@RequiresRoles和@RequiresPermissions,
分別用來控制角色和權限,粒度不一樣


6.之後會回調AuthRealm的doGetAuthorizationInfo方法,進行校驗,形成一個閉環。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章