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