Shiro
首先Shiro較之 Spring Security,Shiro在保持強大功能的同時,還在簡單性和靈活性方面擁有巨大優點。html
Shiro是一個強大而靈活的開源安全框架,可以很是清晰的處理認證、受權、管理會話以及密碼加密。以下是它所具備的特色:spring
- 易於理解的 Java Security API;
- 簡單的身份認證(登陸),支持多種數據源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
- 對角色的簡單的籤權(訪問控制),支持細粒度的籤權;
- 支持一級緩存,以提高應用程序的性能;
- 內置的基於 POJO 企業會話管理,適用於 Web 以及非 Web 的環境;
- 異構客戶端會話訪問;
- 很是簡單的加密 API;
- 不跟任何的框架或者容器捆綁,能夠獨立運行。
Spring Security
除了不能脫離Spring,shiro的功能它都有。並且Spring Security對Oauth、OpenID也有支持,Shiro則須要本身手動實現。Spring Security的權限細粒度更高(筆者還未發現高在哪裏)。sql
注:apache
OAuth在"客戶端"與"服務提供商"之間,設置了一個受權層(authorization layer)。"客戶端"不能直接登陸"服務提供商",只能登陸受權層,以此將用戶與客戶端區分開來。"客戶端"登陸受權層所用的令牌(token),與用戶的密碼不一樣。用戶能夠在登陸的時候,指定受權層令牌的權限範圍和有效期。緩存
"客戶端"登陸受權層之後,"服務提供商"根據令牌的權限範圍和有效期,向"客戶端"開放用戶儲存的資料。安全
OpenID 系統的第一部分是身份驗證,即如何經過 URI 來認證用戶身份。目前的網站都是依靠用戶名和密碼來登陸認證,這就意味着你們在每一個網站都須要註冊用戶名和密碼,即使你使用的是一樣的密碼。若是使用 OpenID ,你的網站地址(URI)就是你的用戶名,而你的密碼安全的存儲在一個 OpenID 服務網站上(你能夠本身創建一個 OpenID 服務網站,也能夠選擇一個可信任的 OpenID 服務網站來完成註冊)。cookie
與OpenID同屬性的身份識別服務商還有ⅥeID,ClaimID,CardSpace,Rapleaf,Trufina ID Card等,其中ⅥeID通用帳戶的應用最爲普遍。框架
綜述
我的認爲現階段需求,權限的操做粒度能控制在路徑及按鈕上,數據粒度經過sql實現。Shrio簡單夠用。ide
至於OAuth,OpenID 站點間統一登陸功能,現租戶與各個產品間單點登陸已經經過cookies實現,因此Spring Security的這兩個功能能夠不考慮。post
SpringSide網站的權限也是用Shrio作的。
shiro有不少地方都比spring security方便簡單直接,比起spring security的龐大模式更容易理解和切入一些,而spring security比shiro功能上要多一點,再就是和spring框架的無縫對接,好比支持spel等,有時候比shiro更方便靈活。不過spring security的不少源代碼我看了感受可插拔性設計的不夠優化,想本身擴展的話要作不少無謂的工做。
可是咱們團隊最終選擇了spring security,一是由於spring這個名字的加持,再就是咱們偏向選擇一個足夠健壯的框架,足以支持全部的需求,最終總共只須要付出學習這一個框架的成本就好了。而不是先學習一個足以應對絕大多數狀況的簡單框架,在特殊狀況時又必須學習功能更強的框架,最終付出雙倍的學習成本。