<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>

                ## 簡介 * Secure 基于 JWT 封裝,每次請求的時候,會攔截到需要鑒權的API請求,并對其請求頭攜帶的Token進行認證。 * 若 Token 過期、不存在、錯誤,都會導致鑒權失敗,繼而無法訪問到對應的API。 * SpringBlade 的安全框架 Secure 在 [Blade-Tool](https://github.com/chillzhuang/blade-tool.git) 中,有興趣的小伙伴可以閱讀下源碼,查看實現原理。 * 本章介紹 Secure 的基本使用方法。 ## 如何通過認證 1. 首先需要訪問Auth接口,傳入賬號名密碼,獲得授權成功后的信息 2. 啟動`AuthApplication`、`UserApplication`、 `BladeLogApplication`三個服務 ![](https://box.kancloud.cn/f929267260b15605e6eda440fab138ae_379x186.png) 3. 調用 http://localhost/blade-auth/token 傳入對應參數,如下圖所示則說明認證信息獲取成功 `("c3dvcmQ6c3dvcmRfc2VjcmV0"為clientId:clientSecret串轉換為的base64編碼,這個是可變的)` ![](https://box.kancloud.cn/4bf1a28dcd92a741ae1bc08ed9a99355_1786x438.png) ![](https://box.kancloud.cn/8559d4c47925e4b60483fabd6c3819f9_1784x1400.png) 4. 從返回的Json中取到 `tokenType` 和 `accessToken`,將他們拼接起來并以逗號隔開 5. 設置請求頭為`blade-auth`,請求頭對應的值為 `tokenType` + `' '` + `accessToken` (后續的所有接口調用都需要帶上請求頭為 `Authorization` 值為 `c3dvcmQ6c3dvcmRfc2VjcmV0`) 6. 再次調用 http://localhost/blade-demo/api/info?name=Chill 發現返回 `Hello, My Name Is: Chill` 說明鑒權成功! ![](https://box.kancloud.cn/725b745460b6b552ce51c5ddec5ce4cb_657x358.png) 7. 理論上看,所有業務API,都需要進行鑒權,這樣才能保證整個系統的安全性,但也有個別特例情況,API 不需要認證也可以調用,這里就需要用到 Secure 的 API 放行配置。 8. 有些業務 API 鑒權就算成功,也有可能需要根據角色權限來判斷是否可以調用,這里就需要用到 Secure更細顆粒度的鑒權配置。 <br> ## API 鑒權 ### 配置API放行 1. 若是使用SpringBoot版本,前往對應配置文件,增加接口放行配置 ![](https://img.kancloud.cn/3a/13/3a13cb714d3cee1adb8f3bb626cd804c_2430x1066.png) 2. 若是使用SpringCloud,則打開nacos,找到對應配置文件增加接口放行配置 ![](https://img.kancloud.cn/c8/6b/c86be25ea8a700259689faf716f86959_1780x1424.png) 3. 若需要攔截某個api下所有的請求,則可以改為 `/api/**`, 其中 `**` 則代表下層所有請求 4. 重啟工程,去掉請求頭,可以看到,請求成功了,說明 `API 放行` 配置成功 ![](https://box.kancloud.cn/8618457bee78709af09d2436c305f7e3_724x370.png) <br> ### 細顆粒度鑒權配置 1. 鑒權配置用到了 Secure 模塊的 `@PreAuth` 注解 2. 為了可以起到對比的作用,對 `count` 進行權限放行(只要通過Token認證就可調用API)。 ~~~ @GetMapping("count") @PreAuth("permitAll()") public Integer count(Integer cnt) { return cnt * 10; } ~~~ 3. 對 `info`進行權限判斷,調用方需要擁有`test`的角色權限才可以調用 ~~~ @GetMapping("info") @PreAuth("hasRole('test')") public String info(String name) { return "Hello, My Name Is: " + name; } ~~~ 4. 調用 `/api/count` 發現請求成功。 ![](https://box.kancloud.cn/a0b7f4eb4488b7c91962835e3d0b91eb_659x348.png) 5. 調用 `/api/info` 發現又變回了 `請求未授權`,因為我們的`admin`賬號沒有分配`test`角色 ![](https://box.kancloud.cn/8d796eae591cb83f64d327a4d781733e_701x412.png) 6. 嘗試改回`admin`權限 ~~~ @GetMapping("info") @PreAuth("hasRole('administrator')") public String info(String name) { return "Hello, My Name Is: " + name; } ~~~ 7. 調用 `/api/info` 發現請求成功。 ![](https://box.kancloud.cn/0e9c601af49ebac007a05c0a3e2a2346_607x350.png) <br> ## 結尾 * Secure 框架進行了兩層 API 鑒權。 * 第一層校驗請求攜帶的Token是否合法,不需要Token校驗的可通過配置放行。 * 第二層校驗`@PreAuth`配置的邏輯是否符合,若不符合也返回`請求未授權`。 * 注解 `@PreAuth`支持類層級和方法層級,放到類層級則對該類的所有方法進行鑒權。 * 注解 `@PreAuth`還支持 Spring el 表達式,可拓展性非常高,更多功能等您挖掘~ * Spring el 文檔地址:https://docs.spring.io/spring/docs/4.3.16.RELEASE/spring-framework-reference/htmlsingle/#expressions-operators-logical
                  <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>

                              哎呀哎呀视频在线观看