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

                ## 前言 * 隨著對系統安全性要求的逐步提高,單純的jwt傳輸已經無法滿足外部對于“安全”的定義 * 需要對jwt加密傳輸但又不影響系統整體功能使用的需求迫在眉睫 * SpringBlade經過巧妙設計,以極小的改動,支持了jwt的加密傳輸并且不影響現有的任何業務代碼 ## 令牌調用流程 1. 前端通過api調用時,會將Token放入header傳遞給后端 2. 后端在執行接口之前,獲取請求的header并對Token進行解析 3. 若解析校驗失敗或者Token過期,則拒絕接口訪問 4. 若解析校驗成功,則進入接口邏輯,并且可獲取Token解析后的關鍵字段 ## 實現加密思路 ##### 在不影響整體流程的前提下,我們進行了下述 <span style="color:red">紅字?</span> 部分的操作,可插拔的形式,完全不影響,改動也非常小 1. 前端通過api調用時,<span style="color:red">先對Token進行可解密的Aes加密</span>,將<span style="color:red">加密后</span>的Token放入header傳遞給后端 2. 后端在執行接口之前,獲取請求的header并對Token進行解析,<span style="color:red">若判斷為加密Token,則先進行解密</span> 3. <span style="color:red">將解密后獲取的原版Token往下傳遞</span>,若解析校驗失敗或者Token過期,則拒絕接口訪問 4. 若解析校驗成功,則進入接口邏輯,并且可獲取Token解析后的關鍵字段 ## 開始對接 1. 前端找到需要進行加密傳輸的接口,加上 `cryptoToken: true` 的配置,具體如下 ```javascript export const getList = (current, size, params) => { return request({ url: '/blade-desk/notice/list', method: 'get', params: { ...params, current, size, }, cryptoToken: true, }); }; ``` 2. 找到前端的crypto工具類,修改aesKey的值,<span style="color:red">注意這個值不要用bladex自帶提供的,一定要自行用AesUtil.genAesKey重新獲取,否則容易被別人惡意利用</span> ![](https://img.kancloud.cn/bd/9e/bd9e68981a3ee404d261dc0b9e3a5b8f_1526x378.png) 3. 找到后端的配置,將值設置為前端一致 ![](https://img.kancloud.cn/6c/cb/6ccb98f0f7a63c072ff6ee295db6f92a_1908x1576.png) 4. 配置完畢,token全自動的加密解密就做好了,之前寫的業務代碼無需做任何變動 ## 進階配置 1. 經過上述配置之后,后端接口可以同時解析jwt和加密后的jwt,攻擊者仍然可以偽造jwt進行滲透攻擊 2. 為了近一步安全考慮,我們可以強制指定某些接口只接受加密jwt,如此一來,就提高了滲透攻擊的難度,加強了系統的安全性 3. 強制指定可以有兩種方式進行 4. 通過注解 `@PreAuth(AuthConstant.HAS_CRYPTO)` 實現,可以放在方法上也可以放在controller上 ```java @PreAuth("hasCrypto()") @GetMapping("/detail") @ApiOperationSupport(order = 1) @ApiOperation(value = "詳情", notes = "傳入notice") public R<NoticeVO> detail(Notice notice) { Notice detail = noticeService.getOne(Condition.getQueryWrapper(notice)); return R.data(NoticeWrapper.build().entityVO(detail)); } ``` 7. 配置好之后,我們實際操作看下network的參數,可以看到token傳輸已加密并且返回了正確的數據 ![](https://img.kancloud.cn/5f/4b/5f4b09bf5c5cdae61254238b85c83972_2590x1846.png) ![](https://img.kancloud.cn/5f/4b/5f4b09bf5c5cdae61254238b85c83972_2590x1846.png) ![](https://img.kancloud.cn/a0/61/a061720bbe7a589be6afa571c8227893_2580x1842.png)
                  <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>

                              哎呀哎呀视频在线观看