簡單介紹
對於Shiro來講不只可使用到JavaSE的開發中,還可使用到JavaEE的開發中,Shiro能夠完成的工做有。認證、受權、加密、會話管理、與Web的集成、緩存等等操做,在SpringBoot使用前端框架的時候就整合了Shiro而且與Thymeleaf整合的也是很是好。
下面就是關於Shiro簡單的功能架構圖前端
Authentication 身份認證/登陸,驗證用戶是否是擁有相應的身份。
Authorization 受權,權限驗證,驗證某個已經認證的用戶是否有某個權限,也就是判斷用戶是否能作什麼樣的事情。例如驗證用戶是不是某個角色
Session Manager 會話管理,也就是用戶登陸後就是一次會話,在沒有退出以前,它的全部信息都在會話中,會話能夠是普通的JavaSE會話,也能夠是Web會話。
Cryptography 加密,保護數據的安全性,例如密碼加密存儲到數據庫,而不是經過明文存儲
Web Support Web支持,能夠很容易的集成到Web環境中。
Caching 緩存,例如用戶登陸以後,其用戶信息、用戶角色權限等都不須要每次都進行查詢。這樣能夠提升效率
Concurrency Shiro 支持多線程應用併發驗證,即在一個線程中開啓另外一個線程能把權限自動傳播過去;
Testing 提供測試支持
Run As 容許一個用戶假裝成爲另外一個用戶進行訪問
Remember Me 記住我。下次登陸的時候不用登陸數據庫
注意
Shiro 不會維護用戶、維護權限;這些都是須要經過用戶設計來實現,而後經過對應的方式注入到Shiro中便可。緩存
Shiro工做流安全
從上圖能夠看出來,與應用程序代碼直接交互的是Subject對象,也就是說Shiro對外的API核心的內容就是Subject,下面就來介紹一下整個交互過程當中的各個API含義前端框架
Subject:主體,表明當前用戶,這裏的用戶並非指具體的人,與當前應用交互的任何的東西都是Subject,例如客戶端等等,也就是說這個是一個抽象的概念,全部的Subject都綁定到一個SecurityManager,與Subject的全部交互都要委託到SecurityManager;能夠把Subject看作是一個代理,真正的執行者是SecurityManager。
SecurityManager:安全管理器;也就是是全部跟安全相關的操做都會與SecurityManager進行交互。而且他還管理全部的Subject,能夠看出它纔是真正的Shiro的核心,負責與後面要介紹的其餘組件進行交互。也就是相似於SpringMVC中的DispacherSevlet前端控制器
Realm 域,Shiro從Realm獲取安全數據例如用戶、角色、權限等等,也就是說Security Manager要驗證用戶身份,那麼他須要從Realm獲取相應的用戶進行比較肯定用戶身份是否合法。也須要從Realm中獲得用戶相應的角色權限驗證用戶是否能進行操做;能夠把Realm當作是一個DataSource,也就是一個相似於安全數據源。服務器
也就是說,Shiro不提供用戶權限,可是經過Realm進行維護多線程
Shiro內部架構架構
從圖中能夠看到全部的應用於Shiro交互都是經過Subject來實現的。併發
Subject:主體,任何應用交互的抽象用戶
SecurityManager:相似於SpringMVC中的DispatchServlet,是Shiro中的核心內容,全部的操做都是經過SecurityManager進行的控制,管理這全部的Subject、而且負責認證受權會話管理等等。
Authenticator:認證器,負責主體的認證,這個是擴展點,若是開發者以爲Shiro默認的很差用,也能夠本身實現本身的認證策略,也就是在什麼樣的狀況下才算是用戶認證經過。
Authrizer:受權器,或者是訪問控制器,用來決定主體是否有權限進行相應的操做;也就是控制用戶能訪問應用中的哪些功能。
Realm:能夠有一個也能夠有多個,安全實體數據源,也就是經過這個獲取到一個安全的實體。可使用JDBC實現,能夠是LDAP實現,或者是經過內存實現等等,是由開發者提供。可是須要注意的一點是Shiro並不知道用戶權限是以哪一種格式進行存儲的。因此在開發中一般是使用本身的自定義的來進行控制。
SessionManager:在Servlet中,Session是一個重要的概念,而Shiro中對於Session的管理就是經過SessionManager進行管理,Shiro不只僅能夠用在Web環境中,也可使用到非Web環境的JavaSE中,因此,Shiro抽象了一個Session來管理主體與應用之間的數據交互,這樣的話,例如在一個Web環境中使用了是Web服務器可是在其餘客戶端中使用的就不是Web服務器,這就致使一個問題Session放到哪裏,這裏推薦使用的是Memcached也就是進行緩存操做。利用分佈式操做將Session存到一個統一的地方,全部的服務器都從同一個地方獲取Session的數據。
Session DAO:對於Dao,做爲數據訪問對象,用於會話的CRUD操做,例如將Session緩存到Redis中或者是Memcached中,都是經過SessionDAO來實現高可用的操做。
CacheManager:緩存控制器,來管理用戶、角色、權限等緩存操做,由於這些數據都是不多去改變的東西,因此放到緩存中用來提升性能。
Cryptography:密碼模塊,Shiro提升安全性能的密碼的加解密操做。框架
總結 做爲Shiro一個經常使用的安全框架, shiro 應用實例 www.1b23.com,雖然功能呢沒有SpringSecurity那麼強大,可是小巧,靈活性較高,在使用的過程當中能夠實現一些自定義的特殊功能。上面簡單的學習了在Shiro常用到的組件。後面的分享學習中還會有更多的精彩。