「每日分享」Shiro和Spring Security對比

點擊上方"java全棧技術"關注,每天學習一個java知識點,喜歡的也可以關注WX號"ITeye"

Shiro簡介

Apache Shiro是Java的一個安全框架。目前,使用Apache Shiro的人越來越多,因為它相當簡單,對比Spring Security,可能沒有Spring Security做的功能強大,但是在實際工作時可能並不需要那麼複雜的東西,所以使用小而簡單的Shiro就足夠了。對於它倆到底哪個好,這個不必糾結,能更簡單的解決項目問題就好了。

Shiro架構與功能介紹

兩個基本的概念

安全實體:系統需要保護的具體對象數據

權限:系統相關的功能操作,例如基本的CRUD

Authentication:身份認證/登錄,驗證用戶是不是擁有相應的身份;

Authorization:授權,即權限驗證,驗證某個已認證的用戶是否擁有某個權限;即判斷用戶是否能做事情,常見的如:驗證某個用戶是否擁有某個角色。或者細粒度的驗證某個用戶對某個資源是否具有某個權限;

Session Manager:會話管理,即用戶登錄後就是一次會話,在沒有退出之前,它的所有信息都在會話中;會話可以是普通JavaSE環境的,也可以是如Web環境的;

Cryptography:加密,保護數據的安全性,如密碼加密存儲到數據庫,而不是明文存儲;

Web Support:Web支持,可以非常容易的集成到Web環境;

Caching:緩存,比如用戶登錄後,其用戶信息、擁有的角色/權限不必每次去查,這樣可以提高效率;

Concurrency:shiro支持多線程應用的併發驗證,即如在一個線程中開啟另一個線程,能把權限自動傳播過去;

Testing:提供測試支持;

Run As:允許一個用戶假裝為另一個用戶(如果他們允許)的身份進行訪問;

Remember Me:記住我,這個是非常常見的功能,即一次登錄後,下次再來的話不用登錄了。

2.Shiro四大核心功能:Authentication,Authorization,Cryptography,Session Management

「每日分享」Shiro和Spring Security對比

Shiro架構

3.Shiro三個核心組件:Subject, SecurityManager 和 Realms.

Subject:主體,代表了當前“用戶”,這個用戶不一定是一個具體的人,與當前應用交互的任何東西都是Subject,如網絡爬蟲,機器人等;即一個抽象概念;所有Subject都綁定到SecurityManager,與Subject的所有交互都會委託給SecurityManager;可以把Subject認為是一個門面;SecurityManager才是實際的執行者;

SecurityManager:安全管理器;即所有與安全有關的操作都會與SecurityManager交互;且它管理著所有Subject;可以看出它是Shiro的核心,它負責與後邊介紹的其他組件進行交互,如果學習過SpringMVC,你可以把它看成DispatcherServlet前端控制器;

Realm:域,Shiro從從Realm獲取安全數據(如用戶、角色、權限),就是說SecurityManager要驗證用戶身份,那麼它需要從Realm獲取相應的用戶進行比較以確定用戶身份是否合法;也需要從Realm得到用戶相應的角色/權限進行驗證用戶是否能進行操作;可以把Realm看成DataSource,即安全數據源。

Spring Security簡介

Spring Security是一個能夠為基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉Inversion of Control ,DI:Dependency Injection 依賴注入)和AOP(面向切面編程)功能,為應用系統提供聲明式的安全訪問控制功能,減少了為企業系統安全控制編寫大量重複代碼的工作。它是一個輕量級的安全框架,它確保基於Spring的應用程序提供身份驗證和授權支持。它與Spring MVC有很好地集成,並配備了流行的安全算法實現捆綁在一起。安全主要包括兩個操作“認證”與“驗證”(有時候也會叫做權限控制)。“認證”是為用戶建立一個其聲明的角色的過程,這個角色可以一個用戶、一個設備或者一個系統。“驗證”指的是一個用戶在你的應用中能夠執行某個操作。在到達授權判斷之前,角色已經在身份認證過程中建立了。

它的設計是基於框架內大範圍的依賴的,可以被劃分為以下幾塊。

  • Web/Http 安全:這是最複雜的部分。通過建立 filter 和相關的 service bean 來實現框架的認證機制。當訪問受保護的 URL 時會將用戶引入登錄界面或者是錯誤提示界面。
  • 業務對象或者方法的安全:控制方法訪問權限的。
  • AuthenticationManager:處理來自於框架其他部分的認證請求。
  • AccessDecisionManager:為 Web 或方法的安全提供訪問決策。會註冊一個默認的,但是我們也可以通過普通 bean 註冊的方式使用自定義的 AccessDecisionManager。
  • AuthenticationProvider:AuthenticationManager 是通過它來認證用戶的。
  • UserDetailsService:跟 AuthenticationProvider 關係密切,用來獲取用戶信息的。
「每日分享」Shiro和Spring Security對比

Shiro和Spring Security比較

  1. Shiro比Spring更容易使用,實現和最重要的理解
  2. Spring Security更加知名的唯一原因是因為品牌名稱
  3. “Spring”以簡單而聞名,但諷刺的是很多人發現安裝Spring Security很難
  4. 然而,Spring Security卻有更好的社區支持
  5. Apache Shiro在Spring Security處理密碼學方面有一個額外的模塊
  6. Spring-security 對spring 結合較好,如果項目用的springmvc ,使用起來很方便。但是如果項目中沒有用到spring,那就不要考慮它了。
  7. Shiro 功能強大、且 簡單、靈活。是Apache 下的項目比較可靠,且不跟任何的框架或者容器綁定,可以獨立運行

Shiro學習教程可參照開源的《跟我學Shiro》: http://jinnianshilongnian.iteye.com/blog/2018398

原文:https://blog.csdn.net/liyuejin/article/details/77838868


分享到:


相關文章: