Shiro和Spring Security對比

Shiro簡介

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

Shiro架構與功能介紹

認證與受權相關基本概念

兩個基本的概念算法

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

權限:系統相關的功能操做,例如基本的CRUD數據庫

  1. Authentication:身份認證/登陸,驗證用戶是否是擁有相應的身份;
  2. Authorization:受權,即權限驗證,驗證某個已認證的用戶是否擁有某個權限;即判斷用戶是否能作事情,常見的如:驗證某個用戶是否擁有某個角色。或者細粒度的驗證某個用戶對某個資源是否具備某個權限;
  3. Session Manager:會話管理,即用戶登陸後就是一次會話,在沒有退出以前,它的全部信息都在會話中;會話能夠是普通JavaSE環境的,也能夠是如Web環境的;
  4. Cryptography:加密,保護數據的安全性,如密碼加密存儲到數據庫,而不是明文存儲;
  5. Web Support:Web支持,能夠很是容易的集成到Web環境;
  6. Caching:緩存,好比用戶登陸後,其用戶信息、擁有的角色/權限沒必要每次去查,這樣能夠提升效率;
  7. Concurrency:shiro支持多線程應用的併發驗證,即如在一個線程中開啓另外一個線程,能把權限自動傳播過去;
  8. Testing:提供測試支持;
  9. Run As:容許一個用戶僞裝爲另外一個用戶(若是他們容許)的身份進行訪問;
  10. Remember Me:記住我,這個是很是常見的功能,即一次登陸後,下次再來的話不用登陸了。

Shiro四大核心功能

Java安全框架Shiro和Spring Security對比

Shiro三個核心組件

  1. Subject:主體,表明了當前「用戶」,這個用戶不必定是一個具體的人,與當前應用交互的任何東西都是Subject,如網絡爬蟲,機器人等;即一個抽象概念;全部Subject都綁定到SecurityManager,與Subject的全部交互都會委託給SecurityManager;能夠把Subject認爲是一個門面;SecurityManager纔是實際的執行者;
  2. SecurityManager:安全管理器;即全部與安全有關的操做都會與SecurityManager交互;且它管理着全部Subject;能夠看出它是Shiro的核心,它負責與後邊介紹的其餘組件進行交互,若是學習過SpringMVC,你能夠把它當作DispatcherServlet前端控制器;
  3. 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 關係密切,用來獲取用戶信息的。

Java安全框架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 下的項目比較可靠,且不跟任何的框架或者容器綁定,能夠獨立運行

相關文章
相關標籤/搜索