<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 1. 什么是shiro Shiro是Apache下的一個開源項目,我們稱之為Apache Shiro。它是一個很易用與Java項目的的安全框架,提供了認證、授權、加密、會話管理,與 Spring Security 一樣都是做一個權限的安全框架,但是與Spring Security 相比,在于 Shiro 使用了比較簡單易懂易于使用的授權方式。 系統認證分為: 1. 用戶認證(搞清楚你是誰) 2. 權限控制(搞清楚你在這能干嘛) ## 2. 三大核心組件 ### 2.1 組件介紹 ![](https://box.kancloud.cn/1fb8e11dce1d2799c52ebd1e6d3c2721_410x220.png) * subject:用戶或者程序,可以是任何語言編寫。(這個跟uel攔截器一樣) * securityManager:安全管理器,對全部的subject進行安全管理,它是shiro的核心,負責對所有的subject進行安全管理。通過SecurityManager可以完成subject的認證、授權等,實質上SecurityManager是通過Authenticator進行認證,通過Authorizer進行授權,通過SessionManager進行會話管理等。它自身只是一個接口。 - Realms 用于進行權限信息的驗證,也是我們需要自己實現的。從數據源獲取存入的權限信息(人員表,權限表等。。。) * Authentic:認證器,Authenticator是一個接口,shiro提供ModularRealmAuthenticator實現類,通過ModularRealmAuthenticator基本上可以滿足大多數需求,也可以自 定義認證器。(相當于ur權限l的登錄攔截器哦) * Authorizer:Authorizer即授權器,用戶通過認證器認證通過,在訪問功能時需要通過授權器判斷用戶是否有此功能的操作權限(相當于url權限系統的權限攔截器)。 * sessionManager:即會話管理,shiro框架定義了一套會話管理,它不依賴web容器的session,所以shiro可以使用在非web應用上,也可以將分布式應用的會話集中在一點管理,此特性可使它實現單點登錄。(相當于ur權限系統里面自帶的httpsession,而它可以獨立) * sessionDao:SessionDAO即會話dao,是對session會話操作的一套接口,比如要將session存儲到數據庫,可以通過jdbc將會話存儲到數據庫。 * realms:領域相當于datasource數據源,securityManager進行安全認證需要通過Realm獲取用戶權限數據,比如:如果用戶身份數據在數據庫那么realm就需要從數據庫獲取用戶身份信息。(相當于ur權限系統里面自帶的mysql,而它還支持驗證) * 注意:不要把realm理解成只是從數據源取數據,在realm中還有認證授權校驗的相關的代碼。 * cacheManager: CacheManager即緩存管理,將用戶權限數據存儲在緩存,這樣可以提高性能。 * Cryptography:Cryptography即密碼管理,shiro提供了一套加密/解密的組件,方便開發。比如提供常用的散列、加/解密等功能。MD5即是散列(相當于ur權限系統里面MD5) - principal:身份信息 就是主體的身份標志,身份信息是一對多關系。上圖你可以是群主,也是尊貴的QQ會員(身份體現)。 - credential:憑證信息 只要主體知道,或者主體提供的信息。例如我們的身份證憑證。上圖為登錄密碼(身份證硬件)。 ### 2.2 驗證流程圖 1. 一般的驗證流程(攔截器) ![](https://box.kancloud.cn/c1f2d1fbcc5acf988595790fa2e9951a_566x430.png) 2. shiro驗證流程 ![](https://box.kancloud.cn/41c98e1cfb51b1c05447b34d58af9577_351x520.png) 來了一個人,首先判斷是不是我的人 如果是我的人,再看看咱倆啥關系(權限認證) 根據咱倆啥關系,咱辦啥事 用戶認證通過之后,接下來就是主體subject訪問資源resource的時候,這個時候就需要驗證權限身份principal。如果擁有憑證credential就可以訪問。 我們需要實現Realms的Authentication 和 Authorization。其中 Authentication 是用來驗證用戶身份,Authorization 是授權訪問控制,用于對用戶進行的操作授權,證明該用戶是否允許進行當前操作,如訪問某個鏈接,某個資源文件等。 1、主體:(賬戶、密碼) 2、資源:(資源名稱、資源訪問地址) 3、權限:(權限名稱、資源id) 4、角色:(角色名稱) 5、角色權限關系:(角色id、權限id) 6、主體角色關系:(主體id、角色id) ### 2.3 權限控制 了解了用戶認證、用戶授權、權限模型之后,我們來看看權限控制,就是我們上面我們看到的判斷。 #### 2.3.1 基于角色控制權限 RBAC基于角色的訪問控制(Role-Based Access Control)是以角色為中心進行訪問控制 例如: ~~~ if(主體.hasRole("總經理角色id")){ 查詢工資 } ~~~ 缺陷:如果懂事長秘書也有查詢工資的權限呢??如下 if(主體.hasRole("總經理角色id")||主體.hasRole("懂事長秘書角色id")){ 查詢工資 } 所有這種我們一般不建議!!! #### 2.3.2 基于資源控制權限 RBAC基于資源的訪問控制(Resource-Based Access Control)是以資源為中心進行訪問控制 例如: ~~~ if(主體.hasPermission("查詢工資權限標識")){ 查詢工資 } ~~~ 優點:系統設計時定義好查詢工資的權限標識,即使查詢工資所需要的角色變化為總經理和部門經理也只需要將“查詢工資信息權限”添加到“部門經理角色”的權限列表中,判斷邏輯不用修改,系統可擴展性強。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看