一、前言
Apache Shiro是Java的一個安全框架。目前,使用Apache Shiro的人越來越多,因為它相當簡單。與Spring Security對比,Shiro可能沒有Spring Security做的功能強大,但是在實際工作時可能并不需要那么復雜的東西,所以使用小而簡單的Shiro就足夠了。下面對這兩個安全框架進行了對比,可以根據(jù)你的項目需要選出適合的安全框架。
二、Shiro架構與功能介紹
1.認證與授權相關概念
安全實體:系統(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:記住我,這個是非常常見的功能,即一次登錄后,下次再來的話不用登錄了。
2.Shiro四大核心功能
Authentication,Authorization,Cryptography,Session Management
3.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ù)源。
三、Spring Security簡介
Spring Security是一個能夠為基于Spring的企業(yè)應用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉(zhuǎn)Inversion of Control ,DI:Dependency Injection 依賴注入)和AOP(面向切面編程)功能,為應用系統(tǒng)提供聲明式的安全訪問控制功能,減少了為企業(yè)系統(tǒng)安全控制編寫大量重復代碼的工作。
它是一個輕量級的安全框架,它確?;赟pring的應用程序提供身份驗證和授權支持。它與Spring MVC有很好地集成,并配備了流行的安全算法實現(xiàn)捆綁在一起。安全主要包括兩個操作“認證”與“驗證”(有時候也會叫做權限控制)?!罢J證”是為用戶建立一個其聲明的角色的過程,這個角色可以一個用戶、一個設備或者一個系統(tǒng)?!膀炞C”指的是一個用戶在你的應用中能夠執(zhí)行某個操作。在到達授權判斷之前,角色已經(jīng)在身份認證過程中建立了。
它的設計是基于框架內(nèi)大范圍的依賴的,可以被劃分為以下幾塊。文章來源:http://www.zghlxwxcb.cn/news/detail-499332.html
Web/Http 安全:這是最復雜的部分。通過建立 filter 和相關的 service bean 來實現(xiàn)框架的認證機制。當訪問受保護的 URL 時會將用戶引入登錄界面或者是錯誤提示界面。
業(yè)務對象或者方法的安全:控制方法訪問權限的。
AuthenticationManager:處理來自于框架其他部分的認證請求。
AccessDecisionManager:為 Web 或方法的安全提供訪問決策。會注冊一個默認的,但是我們也可以通過普通 bean 注冊的方式使用自定義的 AccessDecisionManager。
AuthenticationProvider:AuthenticationManager 是通過它來認證用戶的。
UserDetailsService:跟 AuthenticationProvider 關系密切,用來獲取用戶信息的。文章來源地址http://www.zghlxwxcb.cn/news/detail-499332.html
四、Shiro和Spring Security比較
- Shiro比Spring更容易使用、實現(xiàn)和理解。
- Spring Security更加知名的唯一原因是因為品牌名稱“Spring”以簡單而聞名,但諷刺的是很多人發(fā)現(xiàn)使用Spring Security很困難。但是,Spring Security卻有更好的社區(qū)支持。
- Apache Shiro與Spring Security處理密碼學方面相比有一個額外的模塊。
- Spring Security 與Spring 結(jié)合地較好,如果項目用的springmvc ,使用起來很方便。但是如果項目中沒有用到spring框架,那就不要考慮它了。
- Shiro 功能強大、且簡單、靈活。是Apache基金會下的項目,比較可靠,且不跟任何框架或者容器綁定,可以獨立運行。
到了這里,關于Shiro和Spring Security安全框架對比的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!