文章目錄
安全框架Shiro和Spring Security比較
1.Shiro
1.1 Shiro簡介
Apache Shiro是一個強大且易用的Java安全框架,能夠非常清晰的處理認證、授權、管理會話以及密碼加密。使用Shiro的易於理解的API,您可以快速、輕鬆地獲得任何應用程序,從最小的移動應用程序到最大的網絡和企業應用程序。對於我來說,與Spring Security相比,Shiro更加主流、也更加簡單易用,它不但是適用於javaSE環境,也適用於javaEE環境;最重要的是誰簡單易懂,且能夠快速實現要求,我就用誰!!!
1.2 Shiro架構組成
-
subject:主體,可以是用戶也可以是程序,主體要訪問系統,系統需要對主體進行認證、授權。
-
securityManager:安全管理器,主體進行認證和授權都是通過securityManager進行,是shiro的心臟。
-
realm:域,領域,相當於數據源,通俗意義的DAO層,通過realm存取認證、授權相關數據。
1.3 Shiro功能介紹
-
Authentication
認證,也就是登陸,我們可以利用Shiro完成登陸,登錄時的密碼匹配,就是Shiro幫我們完成的 -
Authorization
授權,當我們點一個連接或一個按鈕的時候,Shiro會幫我們判斷你有沒有這個權限,有權先即可執行 -
SessionManagement
Shiro向我們提供的Session;
我們在web環境下可以使用SesCryptsion,當然,這個是httpSession,如果使用Shiro的話,即便你身處非web環境下,我們也可以使用Session,那個Session,就是Shiro給我們提供的; -
Cryptography
加密,到後面會有具體詳解; -
Web Support
可以很容易的跟,JavaEE應用進行集成; -
Caching
可以在多線程的情況下進行授權,認證; -
Testing
測試 -
Caching
Shiro提供了緩存模塊,讓我們的運行速度更快; -
Run As
讓已經登錄的用戶,以另外一個用戶的身份,來操作當前的系統; -
RememberMe
記住我,用於登錄時記住用戶登錄信息。/
1.4 Shrio特點介紹
- 易於理解的 Java Security API;
- 簡單的身份認證(登錄),支持多種數據源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
- 對角色的簡單的籤權(訪問控制),支持細粒度的籤權;
- 支持一級緩存,以提升應用程序的性能;
- 內置的基於 POJO 企業會話管理,適用於 Web 以及非 Web 的環境;
- 異構客戶端會話訪問;
- 非常簡單的加密 API;
- 不跟任何的框架或者容器捆綁,可以獨立運行。
2. Spring Security
2.1 Spring Security簡介
Spring Security是一個能夠爲基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉Inversion of Control ,DI:Dependency Injection 依賴注入)和AOP(面向切面編程)功能,爲應用系統提供聲明式的安全訪問控制功能,減少了爲企業系統安全控制編寫大量重複代碼的工作。它是一個輕量級的安全框架,它確保基於Spring的應用程序提供身份驗證和授權支持。它與Spring MVC有很好地集成,並配備了流行的安全算法實現捆綁在一起。安全主要包括兩個操作“認證”與“驗證”(有時候也會叫做權限控制)。“認證”是爲用戶建立一個其聲明的角色的過程,這個角色可以一個用戶、一個設備或者一個系統。“驗證”指的是一個用戶在你的應用中能夠執行某個操作。在到達授權判斷之前,角色已經在身份認證過程中建立了。
2.2 對Spring Security個人看法
不過我認爲Spring Security就是因爲Spring而出名,但是它比shiro在使用過程中相對比較難一些,且它所擁有的功能,大部分Shrio都可以實現。儘管Spring Security對Oauth、OpenID也有支持,Shiro則需要自己手動實現,但是這兩個功能現用戶與各個產品間單點登錄已經可以通過cookies實現。所以偶力推Shrio,除非是甲方要求(這得重點標註,沒辦法,甲方有時候纔是真理啊!!!)
2.3 Spring Security一般流程爲
-
當用戶登錄時,前端將用戶輸入的用戶名、密碼信息傳輸到後臺,後臺用一個類對象將其封裝起來,通常使用的是UsernamePasswordAuthenticationToken這個類。
-
程序負責驗證這個類對象。驗證方法是調用Service根據username從數據庫中取用戶信息到實體類的實例中,比較兩者的密碼,如果密碼正確就成功登陸,同時把包含着用戶的用戶名、密碼、所具有的權限等信息的類對象放到SecurityContextHolder(安全上下文容器,類似Session)中去。
-
用戶訪問一個資源的時候,首先判斷是否是受限資源。如果是的話還要判斷當前是否未登錄,沒有的話就跳到登錄頁面。
-
如果用戶已經登錄,訪問一個受限資源的時候,程序要根據url去數據庫中取出該資源所對應的所有可以訪問的角色,然後拿着當前用戶的所有角色一一對比,判斷用戶是否可以訪問。
2.4 Shiro和Spring Security比較
Shiro比Spring更容易使用,實現和最重要的理解
Spring Security更加知名的唯一原因是因爲品牌名稱
“Spring”以簡單而聞名,但諷刺的是很多人發現安裝Spring Security很難
然而,Spring Security卻有更好的社區支持
Apache Shiro在Spring Security處理密碼學方面有一個額外的模塊
Spring-security 對spring 結合較好,如果項目用的springmvc ,使用起來很方便。但是如果項目中沒有用到spring,那就不要考慮它了。
Shiro 功能強大、且 簡單、靈活。是Apache 下的項目比較可靠,且不跟任何的框架或者容器綁定,可以獨立運行