1. 程式人生 > >shiro中AuthorizingRealm介面的doGetAuthorizationInfo 與doGetAuthenticationInfo什麼時候呼叫

shiro中AuthorizingRealm介面的doGetAuthorizationInfo 與doGetAuthenticationInfo什麼時候呼叫

這兩個方法雖然名字很像,但是意義是不一樣的,doGetAuthorizationInfo方法是進行許可權驗證,doGetAuthenticationInfo是進行身份驗證的(登入驗證),相信很多初學者對於這兩個方法的呼叫時機可能不太明白,今天樓主搞了一下午的測試大致明白這兩個方法的呼叫時機。

1.doGetAuthorizationInfo方法

    該方法主要是用於當前登入使用者授權(作者小白插一句:我實現該方法時只是進行了當前登入使用者的角色與許可權初始化,至於授權判斷估計shiro幫我們做了)

    1.呼叫SecurityUtils.getSubject().isPermitted(String str)方法時會呼叫doGetAuthorizationInfo方法,SecurityUtils.getSubject().isPermitted(String str)方法返回的是boolean值所以開發者得自定義業務邏輯。

    2.在配置檔案中配置有類似/**=roles["user"]或者/**=perms[“user”](/**路徑是開發者自行定義)的配置的時候會呼叫doGetAuthorizationInfo方法,這個時候有兩種情況:

       一、 噹噹前沒有使用者登入時shiro會幫我們跳轉到login.jsp(預設會找根目錄下的login.jsp)

       二、當前有登入使用者時shiro會自動判定當前登入使用者的角色或者許可權符合訪問當前訪問路徑,如果不符合那麼將跳轉到開  

            發者所配置的未授權提示頁面( <property name="unauthorizedUrl" value="/unauthorized.jsp"/>),這種呼叫情

            下doGetAuthorizationInfo方法只會被呼叫一次,除非更換了當前登入使用者。


2.doGetAuthenticationInfo方法

    該方法是進行使用者驗證的

    1.呼叫currUser.login(token)方法時會呼叫doGetAuthenticationInfo方法,作者小白重寫該方法的主要內容是根據提交的使用者名稱與密碼到資料庫進行匹配,如果匹配到了就返回一個AuthenticationInfo物件否則返回null,同樣shiro會幫我們進行判斷當返回null的時候會丟擲一個異常,開發者可根據該異常進行相應的邏輯處理


作者小白也是shiro的初學習者,寫該文章的主要目的也是想跟大家共同學習,共同進步,該文章有什麼不足的地方還請大家多多指出,活到老,學到老。