Shiro在Web環境下集成Spring的大致工作流程


1,Shiro提供了對Web環境的支持,其通過一個 ShiroFilter 入口來攔截需要安全控制的URL,然后進行相應的控制。
     ①配置的 ShiroFilter 實現類為:org.springframework.web.filter.DelegatingFilterProxy 。
     ②這是一個 Servlet Filter 的代理對象,它在IOC容器中去找實現了Filter接口的bean。
     ③它可以通過一個初始化參數"targetBeanName"來找到bean,也可以通過<filter-name>找到bean。
 
2, ShiroFilter 類似於SpringMvc中的前端控制器,是安全控制的入口點,其負責讀取配置文件(如ini配置文件),然后判斷該URL是否需要登陸/授權等工作。
     ①在SpringIOC容器中配置org.apache.shiro.spring.web.ShiroFilterFactoryBean的時候,該bean的名稱必須要和 ShiroFilter 的<filter-name>一致。否則在服務加載的時候會報錯。因為Shiro會在IOC容器中查找和<filter-name>對應的filter bean。
     
     下面是一個比較基本的Shiro配置內容:
     

  

 

     
 
3,受保護的URL如何進行配置
     ①[urls]部分的配置,其格式為:url=攔截器[參數],攔截器[參數]。
     ②如果當前請求的url匹配[urls]部分的某個url模式,將會執行器配置的攔截器。
     ③anon(anonymous)攔截器表示可以匿名訪問。
     ④authc(authencation)攔截器標識需要身份認證通過后才能訪問。
     ⑤logout(logout)攔截器表示登出/退出登錄,它 會清空shiro緩存信息
     ⑥ url模式使用 Ant 風格模式
          [1]?匹配一個字符;
          [2]*匹配零個或多個字符;
          [3]**匹配路徑中的零個或多個路徑;
 
 
4,認證/授權基本步驟
     ①獲取當前的 Subject,調用SecurityUtils.getSubject();
     ②判斷當前用戶是否已經認證,調用 Subject 的 isAuthenticated();
     ③或沒有被認證,則把用戶名和密碼封裝為 UserNamePassworkToken 對象
          [1]客戶端提交的表單數據。
          [2]提交數據到SpringMVC的 handler 上。
          [3]獲取用戶名和密碼。
     ④執行登錄,調用 Subject 的 login(AuthencationToken);
     ⑤自定義Realm 方法,從數據庫中獲用戶安全數據,返回給Shiro
          [1]實際上需要繼承 org.apache.shiro.realm.AuthencatingRealm 類(僅僅實現認證, org.apache.shiro.realm.AuthorizingRealm 可以用來認證和授權)。
          [2]實現 doGetAuthenticationInfo(AuthenticationToken) 方法。
     ⑥最后由Shiro完成密碼的比對。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM