亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

RestTemplate如何通過(guò)HTTP?Basic?Auth認(rèn)證示例說(shuō)明

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

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

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

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

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

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

RestTemplate的DELETE及PUT等請(qǐng)求方法使用精講

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

RestTemplate自定義請(qǐng)求失敗異常處理示例解析

RestTemplate請(qǐng)求失敗自動(dòng)重啟機(jī)制精講

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

一、HttpBasic認(rèn)證原理說(shuō)明

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

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

服務(wù)器在收到這樣的請(qǐng)求時(shí),到達(dá)BasicAuthenticationFilter過(guò)濾器,將提取“authorization”的Header值,并使用用于驗(yàn)證用戶身份的相同算法Base64進(jìn)行解碼。

解碼結(jié)果與登錄驗(yàn)證的用戶名密碼匹配,匹配成功則可以繼續(xù)過(guò)濾器后續(xù)的訪問(wèn)。

二、HTTP Basic Auth服務(wù)端實(shí)現(xiàn)

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

當(dāng)然我們也可以不用自己去搭建服務(wù)端,給大家介紹一個(gè)提供免費(fèi)在線的RESTful接口服務(wù)的網(wǎng)站:httpbin.com。這個(gè)網(wǎng)站為我們提供了Basic Auth認(rèn)證測(cè)試服務(wù)接口。如果我們只是為了學(xué)習(xí)RestTemplate,直接用這個(gè)網(wǎng)站提供的服務(wù)就可以了。

瀏覽器訪問(wèn)地址:http://www.httpbin.org/#/Auth/get_basic_auth__user___passwd_

這個(gè)接口服務(wù)是通過(guò)OpenAPI(swagger)實(shí)現(xiàn)的,所以可以進(jìn)行在線的訪問(wèn)測(cè)試。所以可以先通過(guò)頁(yè)面操作測(cè)試一下,再開(kāi)始下面學(xué)習(xí)使用RestTemplate訪問(wèn)服務(wù)端接口。

三、請(qǐng)求頭方式攜帶認(rèn)證信息

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

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

}

測(cè)試用例執(zhí)行成功,說(shuō)明RestTemplate 正確的攜帶了Basic 認(rèn)證信息,得到正常的響應(yīng)結(jié)果:200。

四、攔截器方式攜帶認(rèn)證信息

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

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

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

 

@Configuration
public class ContextConfig {
    @Bean("OKHttp3")
    public RestTemplate OKHttp3RestTemplate(){
        RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
        //添加攔截器
        restTemplate.getInterceptors().add(getCustomInterceptor());
        return restTemplate;
    }
   //實(shí)現(xiàn)一個(gè)攔截器:使用攔截器為每一個(gè)HTTP請(qǐng)求添加Basic Auth認(rèn)證用戶名密碼信息
    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客戶端實(shí)現(xiàn)切換》的內(nèi)容
    private ClientHttpRequestFactory getClientHttpRequestFactory() {
        int timeout = 100000;
        OkHttp3ClientHttpRequestFactory clientHttpRequestFactory
                = new OkHttp3ClientHttpRequestFactory();
        clientHttpRequestFactory.setConnectTimeout(timeout);
        return clientHttpRequestFactory;
    }
}

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

五、進(jìn)一步簡(jiǎn)化

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

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

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

以上就是RestTemplate如何通過(guò)HTTP Basic Auth認(rèn)證示例說(shuō)明的詳細(xì)內(nèi)容,更多關(guān)于RestTemplate認(rèn)證HTTP Basic Auth的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決IDEA中Maven依賴包導(dǎo)入失敗報(bào)紅問(wèn)題(總結(jié)最有效8種解決方案)

    解決IDEA中Maven依賴包導(dǎo)入失敗報(bào)紅問(wèn)題(總結(jié)最有效8種解決方案)

    這篇文章主要介紹了解決IDEA中Maven依賴包導(dǎo)入失敗報(bào)紅問(wèn)題,本文通過(guò)圖文詳解給大家總結(jié)了最有效的8種解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • JAVA中的字符串常量池使用操作代碼

    JAVA中的字符串常量池使用操作代碼

    Java中的字符串常量池是Java堆中的一塊特殊存儲(chǔ)區(qū)域,用于存儲(chǔ)字符串。它的實(shí)現(xiàn)是為了提高字符串操作的性能并節(jié)省內(nèi)存,這篇文章主要介紹了JAVA中的字符串常量池,需要的朋友可以參考下
    2022-12-12
  • Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法

    Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法

    今天小編就為大家分享一篇Java 獲取Html文本中的img標(biāo)簽下src中的內(nèi)容方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Java設(shè)計(jì)模式七大原則之里氏替換原則詳解

    Java設(shè)計(jì)模式七大原則之里氏替換原則詳解

    在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,里氏替換原則(Liskov Substitution principle)是對(duì)子類型的特別定義。本文將為大家詳細(xì)介紹Java設(shè)計(jì)模式七大原則之一的里氏替換原則,需要的可以參考一下
    2022-02-02
  • Spark SQL 編程初級(jí)實(shí)踐詳解

    Spark SQL 編程初級(jí)實(shí)踐詳解

    這篇文章主要為大家介紹了Spark SQL 編程初級(jí)實(shí)踐詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Java 分割字符串詳解及實(shí)例代碼

    Java 分割字符串詳解及實(shí)例代碼

    這篇文章主要介紹了 Java 分割字符串詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • springboot整合apache ftpserver詳細(xì)教程(推薦)

    springboot整合apache ftpserver詳細(xì)教程(推薦)

    這篇文章主要介紹了springboot整合apache ftpserver詳細(xì)教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 分析jackjson的安全漏洞CVE-2019-14379

    分析jackjson的安全漏洞CVE-2019-14379

    這篇文章主要介紹了jackjson的使用及CVE-2019-14379漏洞分析,ackson知識(shí)點(diǎn)序列化和反序列化,setName和getName調(diào)用順序,通過(guò)實(shí)例代碼講解的很詳細(xì),需要的朋友可以參考下
    2021-06-06
  • Mybatis分頁(yè)的實(shí)現(xiàn)及使用注解開(kāi)發(fā)操作

    Mybatis分頁(yè)的實(shí)現(xiàn)及使用注解開(kāi)發(fā)操作

    這篇文章主要介紹了Mybatis分頁(yè)的實(shí)現(xiàn)及使用注解開(kāi)發(fā)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java中的Semaphore信號(hào)量深入解析

    Java中的Semaphore信號(hào)量深入解析

    這篇文章主要介紹了Java中的Semaphore信號(hào)量深入解析,Semaphore是Java里面另外一個(gè)基本的并發(fā)工具包類,主要的的作用是用來(lái)保護(hù)共享資源的訪問(wèn)的,也就是僅僅允許一定數(shù)量的線程訪問(wèn)共享資源,需要的朋友可以參考下
    2023-11-11

最新評(píng)論