Java中shiro框架和security框架的區(qū)別
一、shiro
Shiro三個核心組件:
- Subject
- SecurityManager
- Realms
Subject:主體,代表了當前“用戶”,這個用戶不一定是一個具體的人,與當前應用交互的任何東西都是Subject,如網(wǎng)絡爬蟲,機器人等;即一個抽象概念;所有Subject都綁定到SecurityManager,與Subject的所有交互都會委托給SecurityManager;可以把Subject認為是一個門面;SecurityManager才是實際的執(zhí)行者;
SecurityManager:安全管理器;即所有與安全有關的操作都會與SecurityManager交互;且它管理著所有Subject;可以看出它是Shiro的核心,它負責與后邊介紹的其他組件進行交互,如果學習過SpringMVC,你可以把它看成DispatcherServlet前端控制器;
Realm:域,Shiro從從Realm獲取安全數(shù)據(jù)(如用戶、角色、權限),就是說SecurityManager要驗證用戶身份,那么它需要從Realm獲取相應的用戶進行比較以確定用戶身份是否合法;也需要從Realm得到用戶相應的角色/權限進行驗證用戶是否能進行操作;可以把Realm看成DataSource,即安全數(shù)據(jù)源。
Shiro架構與功能介紹
認證與授權相關基本概念
- 安全實體:系統(tǒng)需要保護的具體對象數(shù)據(jù)
- 權限:系統(tǒng)相關的功能操作,例如基本的CRUD
- Authentication:身份認證/登錄,驗證用戶是不是擁有相應的身份;
- Authorization:授權,即權限驗證,驗證某個已認證的用戶是否擁有某個權限;即判斷用戶是否能做事情,常見的如:驗證某個用戶是否擁有某個角色。或者細粒度的驗證某個用戶對某個資源是否具有某個權限;
- Session Manager:會話管理,即用戶登錄后就是一次會話,在沒有退出之前,它的所有信息都在會話中;會話可以是普通JavaSE環(huán)境的,也可以是如Web環(huán)境的;
- Cryptography:加密,保護數(shù)據(jù)的安全性,如密碼加密存儲到數(shù)據(jù)庫,而不是明文存儲;
- Web Support:Web支持,可以非常容易的集成到Web環(huán)境;
- Caching:緩存,比如用戶登錄后,其用戶信息、擁有的角色/權限不必每次去查,這樣可以提高效率;
- Concurrency:shiro支持多線程應用的并發(fā)驗證,即如在一個線程中開啟另一個線程,能把權限自動傳播過去;
- Testing:提供測試支持;
- Run As:允許一個用戶假裝為另一個用戶(如果他們允許)的身份進行訪問;
- Remember Me:記住我,這個是非常常見的功能,即一次登錄后,下次再來的話不用登錄了。
二、 security
Spring Security 主要實現(xiàn)了Authentication(認證,解決who are you ) 和 Access Control(訪問控制,也就是what are you allowed to do?,也稱為Authorization)。
Spring Security在架構上將認證與授權分離,并提供了擴展點。
它是一個輕量級的安全框架,它確?;赟pring的應用程序提供身份驗證和授權支持。
它與Spring MVC有很好地集成,并配備了流行的安全算法實現(xiàn)捆綁在一起。
實現(xiàn)流程:
客戶端發(fā)起一個請求,進入 Security 過濾器鏈。
當?shù)?LogoutFilter 的時候判斷是否是登出路徑,如果是登出路徑則到 logoutHandler ,如果登出成功則到 logoutSuccessHandler 登出成功處理,如果登出失敗則由 ExceptionTranslationFilter ;如果不是登出路徑則直接進入下一個過濾器。
當?shù)?UsernamePasswordAuthenticationFilter 的時候判斷是否為登錄路徑,如果是,則進入該過濾器進行登錄操作,如果登錄失敗則到 AuthenticationFailureHandler 登錄失敗處理器處理,如果登錄成功則到 AuthenticationSuccessHandler 登錄成功處理器處理,如果不是登錄請求則不進入該過濾器。
當?shù)?FilterSecurityInterceptor 的時候會拿到 uri ,根據(jù) uri 去找對應的鑒權管理器,鑒權管理器做鑒權工作,鑒權成功則到 Controller 層否則到 AccessDeniedHandler 鑒權失敗處理器處理。
三、區(qū)別
Shiro比Spring Security更容易使用,也就是實現(xiàn)上簡單一些,同時基本的授權認證Shiro也基本夠用Spring Security社區(qū)支持度更高,Spring社區(qū)的親兒子,支持力度和更新維護上有優(yōu)勢,同時和Spring這一套的結合較好。
Shiro 功能強大、且 簡單、靈活。
是Apache 下的項目比較可靠,且不跟任何的框架或者容器綁定,可以獨立運行。
總結:
最終選擇還是看項目,如果是spring項目那一套,盡量還是選擇Spring Security,能更加方便順暢。
但相比于shiro略微復雜,如果項目周期短,盡量還是選擇shiro,功能齊全且他人解決方法多。
到此這篇關于Java中shiro框架和security框架的區(qū)別的文章就介紹到這了,更多相關shiro和security的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JNI實現(xiàn)最簡單的JAVA調(diào)用C/C++代碼
這篇文章主要介紹了JNI實現(xiàn)最簡單的JAVA調(diào)用C/C++代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08Synchronized?和?ReentrantLock?的實現(xiàn)原理及區(qū)別
這篇文章主要介紹了Synchronized?和?ReentrantLock?的實現(xiàn)原理及區(qū)別,文章為榮啊主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09SpringBoot實現(xiàn)讀取YML,yaml,properties文件
yml,yaml,properties三種文件都是用來存放配置的文件,一些靜態(tài)數(shù)據(jù),配置的數(shù)據(jù)都會存放到里邊。本文主要為大家整理了SpringBoot實現(xiàn)讀取YML,yaml,properties文件的方法,需要的可以參考一下2023-04-04深入了解Springboot核心知識點之數(shù)據(jù)訪問配置
這篇文章主要為大家介紹了Springboot核心知識點中的數(shù)據(jù)訪問配置,文中的示例代碼講解詳細,對我們了解SpringBoot有一定幫助,快跟隨小編一起學習一下吧2021-12-12JMeter參數(shù)化4種實現(xiàn)方式(小結)
參數(shù)化是自動化測試腳本的一種常用技巧,可將腳本中的某些輸入使用參數(shù)來代替,JMeter提供了多種參數(shù)化方式,下面就其中常用的4種展開闡述,感興趣的可以來了解一下2021-12-12