一、Shiro認證過程
1、收集實體/憑據信息
UsernamePasswordToken支持最常見的用戶名/密碼的認證機制。同時,由于它實現了RememberMeAuthenticationToken接口,我們可以通過令牌設置“記住我”的功能。
但是,“已記住”和“已認證”是有區別的:
已記住的用戶僅僅是非匿名用戶,你可以通過subject.getPrincipals()獲取用戶信息。但是它并非是完全認證通過的用戶,當你訪問需要認證用戶的功能時,你仍然需要重新提交認證信息。
這一區別可以參考亞馬遜網站,網站會默認記住登錄的用戶,再次訪問網站時,對于非敏感的頁面功能,頁面上會顯示記住的用戶信息,但是當你訪問網站賬戶信息時仍然需要再次進行登錄認證。
2、提交實體/憑據信息
收集了實體/憑據信息之后,我們可以通過SecurityUtils工具類,獲取當前的用戶,然后通過調用login方法提交認證。
3、認證處理
如果login方法執行完畢且沒有拋出任何異常信息,那么便認為用戶認證通過。之后在應用程序任意地方調用SecurityUtils.getSubject() 都可以獲取到當前認證通過的用戶實例,使用subject.isAuthenticated()判斷用戶是否已驗證都將返回true.
相反,如果login方法執行過程中拋出異常,那么將認為認證失敗。Shiro有著豐富的層次鮮明的異常類來描述認證失敗的原因,如代碼示例。
二、登出操作
登出操作可以通過調用subject.logout()來刪除你的登錄信息,如:
當執行完登出操作后,Session信息將被清空,subject將被視作為匿名用戶。
三、認證內部處理機制
以上,是Shiro認證在應用程序中的處理過程,下面將詳細解說Shiro認證的內部處理機制。
新聞熱點
疑難解答