最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

RestTemplate如何通過HTTP?Basic?Auth認證示例說明

 更新時間:2022年03月17日 11:43:43   作者:字母哥哥  
這篇文章主要為大家介紹了RestTemplate如何通過HTTP?Basic?Auth認證的示例說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

本文是精講RestTemplate第9篇,前篇的blog訪問地址如下:

RestTemplate在Spring或非Spring環(huán)境下使用精講

RestTemplate實現(xiàn)多種底層HTTP客戶端類庫的切換用法

RestTemplate發(fā)送HTTP GET請求使用方法詳解

RestTemplate發(fā)送HTTP POST請求使用方法詳解

RestTemplate的DELETE及PUT等請求方法使用精講

RestTemplate文件上傳下載與大文件流式下載

RestTemplate自定義請求失敗異常處理示例解析

RestTemplate請求失敗自動重啟機制精講

服務提供方通常會通過一定的授權、鑒權認證邏輯來保護API接口。其中比較簡單、容易實現(xiàn)的方式就是使用HTTP 的Basic Auth來實現(xiàn)接口訪問用戶的認證。我們本節(jié)就來為大家介紹一下,在服務端加入Basic Auth認證的情況下,該如何使用RestTemplate訪問服務端接口。

一、HttpBasic認證原理說明

首先,HttpBasic模式要求傳輸?shù)挠脩裘艽a使用Base64模式進行加密。如果用戶名是 "admin"  ,密碼是“ admin”,則將字符串"admin:admin"使用Base64編碼算法加密。加密結果可能是:YWtaW46YWRtaW4=。

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

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

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

二、HTTP Basic Auth服務端實現(xiàn)

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

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

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

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

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

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

@SpringBootTest
class BasicAuthTests {
   @Resource
   private RestTemplate restTemplate;
   @Test
   void testBasicAuth() {
      //該url上攜帶用戶名密碼是httpbin網站測試接口的要求,
     //真實的業(yè)務是不需要在url上體現(xiàn)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()));
     //發(fā)送請求
      HttpEntity<String> ans = restTemplate
                  .exchange(url,
                        HttpMethod.GET,   //GET請求
                        new HttpEntity<>(null, headers),   //加入headers
                        String.class);  //body響應數(shù)據(jù)接收類型
      System.out.println(ans);
   }

}

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

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

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

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

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

 

@Configuration
public class ContextConfig {
    @Bean("OKHttp3")
    public RestTemplate OKHttp3RestTemplate(){
        RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
        //添加攔截器
        restTemplate.getInterceptors().add(getCustomInterceptor());
        return restTemplate;
    }
   //實現(xiàn)一個攔截器:使用攔截器為每一個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節(jié)-底層HTTP客戶端實現(xiàn)切換》的內容
    private ClientHttpRequestFactory getClientHttpRequestFactory() {
        int timeout = 100000;
        OkHttp3ClientHttpRequestFactory clientHttpRequestFactory
                = new OkHttp3ClientHttpRequestFactory();
        clientHttpRequestFactory.setConnectTimeout(timeout);
        return clientHttpRequestFactory;
    }
}

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

五、進一步簡化

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

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

發(fā)送請求,結果和第三小節(jié)中的效果是一樣的。

以上就是RestTemplate如何通過HTTP Basic Auth認證示例說明的詳細內容,更多關于RestTemplate認證HTTP Basic Auth的資料請關注腳本之家其它相關文章!

相關文章

  • 關于java中可變長參數(shù)的定義及使用方法詳解

    關于java中可變長參數(shù)的定義及使用方法詳解

    下面小編就為大家?guī)硪黄P于java中可變長參數(shù)的定義及使用方法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Java實現(xiàn)單人信息管理程序

    Java實現(xiàn)單人信息管理程序

    這篇文章主要為大家詳細介紹了Java實現(xiàn)單人信息管理程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java使用list集合remove需要注意的事項(使用示例)

    Java使用list集合remove需要注意的事項(使用示例)

    List集合的一個特點是它其中的元素是有序的,也就是說元素的下標是根據(jù)插入的順序來的,在刪除頭部或者中間的一個元素后,后面的元素下標會往前移動,本文給大家介紹Java使用list集合remove需要注意的事項,感興趣的朋友一起看看吧
    2022-01-01
  • Java 自定義Spring框架與Spring IoC相關接口分析

    Java 自定義Spring框架與Spring IoC相關接口分析

    Spring框架是由于軟件開發(fā)的復雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務器端的開發(fā)
    2021-10-10
  • Spring?Boot?使用觀察者模式實現(xiàn)實時庫存管理的步驟

    Spring?Boot?使用觀察者模式實現(xiàn)實時庫存管理的步驟

    在現(xiàn)代軟件開發(fā)中,實時數(shù)據(jù)處理非常關鍵,本文提供了一個使用SpringBoot和觀察者模式開發(fā)實時庫存管理系統(tǒng)的詳細教程,步驟包括創(chuàng)建項目、定義實體類、實現(xiàn)觀察者模式、集成Spring框架、創(chuàng)建RESTful?API端點和測試應用等,這將有助于開發(fā)者構建能夠即時響應庫存變化的系統(tǒng)
    2024-09-09
  • Mybatis逆向工程時失敗問題及解決

    Mybatis逆向工程時失敗問題及解決

    這篇文章主要介紹了Mybatis逆向工程時失敗問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java實現(xiàn)簡單的掃雷圖

    Java實現(xiàn)簡單的掃雷圖

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單的掃雷圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • jar命令修改jar包中的application.yml配置文件

    jar命令修改jar包中的application.yml配置文件

    本文主要介紹了jar命令修改jar包中的application.yml配置文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08
  • javaweb實戰(zhàn)之商城項目開發(fā)(三)

    javaweb實戰(zhàn)之商城項目開發(fā)(三)

    這篇文章主要針對javaweb商城項目開發(fā)進行實戰(zhàn)演習,主要實現(xiàn)通用的BaseDao.java和使用resultMap映射關聯(lián)對象,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Java詳解多線程協(xié)作作業(yè)之信號同步

    Java詳解多線程協(xié)作作業(yè)之信號同步

    信號量同步是指在不同線程之間,通過傳遞同步信號量來協(xié)調線程執(zhí)行的先后次序。CountDownLatch是基于時間維度的Semaphore則是基于信號維度的
    2022-05-05

最新評論

静乐县| 三明市| 定西市| 衡阳市| 泉州市| 皋兰县| 永安市| 九龙城区| 伊金霍洛旗| 都江堰市| 遂昌县| 钟山县| 重庆市| 阳泉市| 日照市| 崇信县| 蓬莱市| 察哈| 吉林省| 临泽县| 石景山区| 福安市| 手游| 明溪县| 彭水| 宁都县| 东山县| 合作市| 法库县| 台东县| 阿尔山市| 德惠市| 济阳县| 兰考县| 衡南县| 邯郸市| 沙雅县| 随州市| 汪清县| 务川| 利津县|