91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RestTemplate怎么通過HTTP?Basic?Auth認證

發布時間:2022-03-17 15:06:14 來源:億速云 閱讀:306 作者:iii 欄目:開發技術

這篇“RestTemplate怎么通過HTTP Basic Auth認證”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“RestTemplate怎么通過HTTP Basic Auth認證”文章吧。

一、HttpBasic認證原理說明

RestTemplate怎么通過HTTP?Basic?Auth認證

首先,HttpBasic模式要求傳輸的用戶名密碼使用Base64模式進行加密。如果用戶名是 "admin"  ,密碼是“ admin”,則將字符串"admin:admin"使用Base64編碼算法加密。加密結果可能是:YWtaW46YWRtaW4=。

然后,在Http請求中使用authorization作為一個HTTP請求頭Header name,“Basic YWtaW46YWRtaW4=“作為Header的值,發送給服務端。(注意這里使用Basic+空格+加密串)

服務器在收到這樣的請求時,到達BasicAuthenticationFilter過濾器,將提取“authorization”的Header值,并使用用于驗證用戶身份的相同算法Base64進行解碼。

解碼結果與登錄驗證的用戶名密碼匹配,匹配成功則可以繼續過濾器后續的訪問。

二、HTTP Basic Auth服務端實現

如果你想自己搭建一個服務端,那么如何為Spring Boot 服務添加Basic Auth認證?請參考我的另外一篇文章:《Spring Security系列之Http Basic Auth登錄認證模式》 。

當然我們也可以不用自己去搭建服務端,給大家介紹一個提供免費在線的RESTful接口服務的網站:httpbin.com。這個網站為我們提供了Basic Auth認證測試服務接口。如果我們只是為了學習RestTemplate,直接用這個網站提供的服務就可以了。

RestTemplate怎么通過HTTP?Basic?Auth認證

瀏覽器訪問地址:http://www.httpbin.org/#/Auth/get_basic_auth__user___passwd_

這個接口服務是通過OpenAPI(swagger)實現的,所以可以進行在線的訪問測試。所以可以先通過頁面操作測試一下,再開始下面學習使用RestTemplate訪問服務端接口。

三、請求頭方式攜帶認證信息

在HTTP請求頭中攜帶Basic Auth認證的用戶名和密碼,具體實現參考下文代碼注釋:

@SpringBootTest
class BasicAuthTests {
   @Resource
   private RestTemplate restTemplate;
   @Test
   void testBasicAuth() {
      //該url上攜帶用戶名密碼是httpbin網站測試接口的要求,
     //真實的業務是不需要在url上體現basic auth用戶名密碼的
      String url = "http://www.httpbin.org/basic-auth/admin/adminpwd";
      //在請求頭信息中攜帶Basic認證信息(這里才是實際Basic認證傳遞用戶名密碼的方式)
      HttpHeaders headers = new HttpHeaders();
      headers.set("authorization",
                  "Basic " +
                  Base64.getEncoder()  
                       .encodeToString("admin:adminpwd".getBytes()));
     //發送請求
      HttpEntity<String> ans = restTemplate
                  .exchange(url,
                        HttpMethod.GET,   //GET請求
                        new HttpEntity<>(null, headers),   //加入headers
                        String.class);  //body響應數據接收類型
      System.out.println(ans);
   }

}

測試用例執行成功,說明RestTemplate 正確的攜帶了Basic 認證信息,得到正常的響應結果:200。

RestTemplate怎么通過HTTP?Basic?Auth認證

四、攔截器方式攜帶認證信息

第三小節中的代碼雖然實現了功能,但是不夠好。因為每一次發送HTTP請求,我們都需要去組裝HttpHeaders 信息,這樣不好,造成大量的代碼冗余。那么有沒有一種方式可以實現可以一次性的為所有RestTemplate請求API添加Http Basic認證信息呢?答案就是:在RestTemplate Bean初始化的時候加入攔截器,以攔截器的方式統一添加Basic認證信息。

下面的代碼結合注釋去看,如果看不懂,需要去參考:

精講RestTemplate第2篇-多種底層HTTP客戶端類庫的切換

@Configuration
public class ContextConfig {
    @Bean("OKHttp3")
    public RestTemplate OKHttp3RestTemplate(){
        RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
        //添加攔截器
        restTemplate.getInterceptors().add(getCustomInterceptor());
        return restTemplate;
    }
   //實現一個攔截器:使用攔截器為每一個HTTP請求添加Basic Auth認證用戶名密碼信息
    private ClientHttpRequestInterceptor getCustomInterceptor(){
        ClientHttpRequestInterceptor interceptor = (httpRequest, bytes, execution) -> {
            httpRequest.getHeaders().set("authorization",
                    "Basic " +
                            Base64.getEncoder()
                                    .encodeToString("admin:adminpwd".getBytes()));
            return execution.execute(httpRequest, bytes);
        };
        return interceptor;
    }
    //這段代碼是《第3節-底層HTTP客戶端實現切換》的內容
    private ClientHttpRequestFactory getClientHttpRequestFactory() {
        int timeout = 100000;
        OkHttp3ClientHttpRequestFactory clientHttpRequestFactory
                = new OkHttp3ClientHttpRequestFactory();
        clientHttpRequestFactory.setConnectTimeout(timeout);
        return clientHttpRequestFactory;
    }
}

在RestTemplate Bean初始化的時候加入攔截器之后,第三小節中的代碼就可以省略HttpHeaders Basic Auth請求頭攜帶信息的組裝過程。發送請求,結果和第三小節中的效果是一樣的。

五、進一步簡化

上面的方式使用了攔截器,但仍然是我們自己來封裝HTTP headers請求頭信息。進一步的簡化方法就是,Spring RestTemplate 已經為我們提供了封裝好的Basic Auth攔截器,我們直接使用就可以了,不需要我們自己去實現攔截器。

RestTemplate怎么通過HTTP?Basic?Auth認證

下面的方法是在RestTemplate Bean實例化的時候使用RestTemplateBuilder,自帶basicAuthentication。所以到這里攔截器也不需要了(實際底層代碼實現仍然是攔截器,只是api層面不需要指定攔截器了)。

RestTemplate怎么通過HTTP?Basic?Auth認證

發送請求,結果和第三小節中的效果是一樣的。

以上就是關于“RestTemplate怎么通過HTTP Basic Auth認證”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

盐源县| 石柱| 崇阳县| 肇庆市| 大足县| 五华县| 汤阴县| 辛集市| 资源县| 介休市| 伊川县| 侯马市| 盐池县| 军事| 余江县| 台中县| 德安县| 巴塘县| 巴马| 连南| 唐海县| 仪征市| 吉安市| 遂宁市| 大邑县| 梁河县| 志丹县| 黔西县| 深水埗区| 兴安县| 宣威市| 达州市| 建宁县| 广昌县| 龙海市| 深水埗区| 榆林市| 巨鹿县| 安仁县| 文安县| 黄冈市|