博客 / 詳情

返回

SpringSecurity能否吊打Shiro?

文章內容:SpringSecurity和Shiro區別及用法

作者:優極限

Apache Shiro是一個強大且易用的Java安全框架,能夠非常清晰的處理認證、授權、管理會話以及密碼加密。使用Shiro的易於理解的API,您可以快速、輕鬆地獲得任何應用程序,從最小的移動應用程序到最大的網絡和企業應用程序。

執行流程

img

特點

  1. 易於理解的 Java Security API;
  2. 簡單的身份認證(登錄),支持多種數據源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
  3. 對角色的簡單的籤權(訪問控制),支持細粒度的籤權;
  4. 支持一級緩存,以提升應用程序的性能;
  5. 內置的基於 POJO 企業會話管理,適用於 Web 以及非 Web 的環境;
  6. 異構客户端會話訪問;
  7. 非常簡單的加密 API;
  8. 不跟任何的框架或者容器捆綁,可以獨立運行。

Spring Security

Spring Security 主要實現了Authentication(認證,解決who are you? ) 和 Access Control(訪問控制,也就是what are you allowed to do?,也稱為Authorization)。Spring Security在架構上將認證與授權分離,並提供了擴展點。它是一個輕量級的安全框架,它確保基於Spring的應用程序提供身份驗證和授權支持。它與Spring MVC有很好地集成 ,並配備了流行的安全算法實現捆綁在一起。

執行流程

img

  1. 客户端發起一個請求,進入 Security 過濾器鏈。
  2. 當到 LogoutFilter 的時候判斷是否是登出路徑,如果是登出路徑則到 logoutHandler ,如果登出成功則到 logoutSuccessHandler 登出成功處理,如果登出失敗則由 ExceptionTranslationFilter ;如果不是登出路徑則直接進入下一個過濾器。
  3. 當到 UsernamePasswordAuthenticationFilter 的時候判斷是否為登錄路徑,如果是,則進入該過濾器進行登錄操作,如果登錄失敗則到 AuthenticationFailureHandler 登錄失敗處理器處理,如果登錄成功則到 AuthenticationSuccessHandler 登錄成功處理器處理,如果不是登錄請求則不進入該過濾器。
  4. 當到 FilterSecurityInterceptor 的時候會拿到 uri ,根據 uri 去找對應的鑑權管理器,鑑權管理器做鑑權工作,鑑權成功則到 Controller 層否則到 AccessDeniedHandler 鑑權失敗處理器處理。

特點

shiro能實現的,Spring Security 基本都能實現,依賴於Spring體系,但是好處是Spring全家桶的親兒子,集成上更加契合,在使用上,比shiro略負責。

兩者對比

Shiro比Spring Security更容易使用,也就是實現上簡單一些,同時基本的授權認證Shiro也基本夠用

Spring Security社區支持度更高,Spring社區的親兒子,支持力度和更新維護上有優勢,同時和Spring這一套的結合較好。

Shiro 功能強大、且 簡單、靈活。是Apache 下的項目比較可靠,且不跟任何的框架或者容器綁定,可以獨立運行。

我的看法

如果開發的項目是Spring這一套,用Spring Security我覺得更合適一些,他們本身就是一套東西,順暢,可能略微複雜一些,但是學會了就是自己的。如果開發項目比較緊張,Shiro可能更合適,容易上手,也足夠用,Spring Security中有的,Shiro也基本都有,沒有的部分網上也有大批的解決方案。

如果項目沒有使用Spring這一套,不用考慮,直接Shiro。

同時要考慮團隊成員的技術棧,更加熟悉使用哪個,在選型上,也要儘量避免給同行增加不必要的學習成本!

感謝大家的點贊與轉發,小編會持續轉發《優極限》優質文章

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.