Apache Shiro是一個功能強大、靈活的,開源的安全框架。它能夠乾淨利落地處理身份驗證、受權、企業會話管理和加密。html
Apache Shiro的首要目標是易於使用和理解。安全一般很複雜,甚至讓人感到很痛苦,可是Shiro卻不是這樣子的。一個好的安全框架應該屏蔽複雜性,向外暴露簡單、直觀的API,來簡化開發人員實現應用程序安全所花費的時間和精力。web
Shiro能作什麼呢?算法
- 驗證用戶身份
- 用戶訪問權限控制,好比:一、判斷用戶是否分配了必定的安全角色。二、判斷用戶是否被授予完成某個操做的權限
- 在非 web 或 EJB 容器的環境下能夠任意使用Session API
- 能夠響應認證、訪問控制,或者 Session 生命週期中發生的事件
- 可將一個或以上用戶安全數據源數據組合成一個複合的用戶 「view」(視圖)
- 支持單點登陸(SSO)功能
- 支持提供「Remember Me」服務,獲取用戶關聯信息而無需登陸
…
等等——都集成到一個有凝聚力的易於使用的API。spring
Shiro 致力在全部應用環境下實現上述功能,小到命令行應用程序,大到企業應用中,並且不須要藉助第三方框架、容器、應用服務器等。固然 Shiro 的目的是儘可能的融入到這樣的應用環境中去,但也能夠在它們以外的任何環境下開箱即用。apache
Apache Shiro Features 特性
Apache Shiro是一個全面的、蘊含豐富功能的安全框架。下圖爲描述Shiro功能的框架圖:api
![](http://static.javashuo.com/static/loading.gif)
Authentication(認證), Authorization(受權), Session Management(會話管理), Cryptography(加密)被 Shiro 框架的開發團隊稱之爲應用安全的四大基石。那麼就讓咱們來看看它們吧:緩存
- Authentication(認證):用戶身份識別,一般被稱爲用戶「登陸」
- Authorization(受權):訪問控制。好比某個用戶是否具備某個操做的使用權限。
- Session Management(會話管理):特定於用戶的會話管理,甚至在非web 或 EJB 應用程序。
- Cryptography(加密):在對數據源使用加密算法加密的同時,保證易於使用。
還有其餘的功能來支持和增強這些不一樣應用環境下安全領域的關注點。特別是對如下的功能支持:安全
- Web支持:Shiro 提供的 web 支持 api ,能夠很輕鬆的保護 web 應用程序的安全。
- 緩存:緩存是 Apache Shiro 保證安全操做快速、高效的重要手段。
- 併發:Apache Shiro 支持多線程應用程序的併發特性。
- 測試:支持單元測試和集成測試,確保代碼和預想的同樣安全。
- 「Run As」:這個功能容許用戶假設另外一個用戶的身份(在許可的前提下)。
- 「Remember Me」:跨 session 記錄用戶的身份,只有在強制須要時才須要登陸。
注意: Shiro不會去維護用戶、維護權限,這些須要咱們本身去設計/提供,而後經過相應的接口注入給Shirospringboot
High-Level Overview 高級概述
在概念層,Shiro 架構包含三個主要的理念:Subject,SecurityManager和 Realm。下面的圖展現了這些組件如何相互做用,咱們將在下面依次對其進行描述。服務器
![](http://static.javashuo.com/static/loading.gif)
- Subject:當前用戶,Subject 能夠是一我的,但也能夠是第三方服務、守護進程賬戶、時鐘守護任務或者其它–當前和軟件交互的任何事件。
- SecurityManager:管理全部Subject,SecurityManager 是 Shiro 架構的核心,配合內部安全組件共同組成安全傘。
- Realms:用於進行權限信息的驗證,咱們本身實現。Realm 本質上是一個特定的安全 DAO:它封裝與數據源鏈接的細節,獲得Shiro 所需的相關的數據。在配置 Shiro 的時候,你必須指定至少一個Realm 來實現認證(authentication)和/或受權(authorization)。
咱們須要實現Realms的Authentication 和 Authorization。其中 Authentication 是用來驗證用戶身份,Authorization 是受權訪問控制,用於對用戶進行的操做受權,證實該用戶是否容許進行當前操做,如訪問某個連接,某個資源文件等。
詳細設計見http://www.ityouknow.com/springboot/2017/06/26/springboot-shiro.html