广告
返回顶部
首页 > 资讯 > 精选 >RestTemplate怎么通过HTTP Basic Auth认证
  • 893
分享到

RestTemplate怎么通过HTTP Basic Auth认证

2023-06-29 13:06:16 893人浏览 泡泡鱼
摘要

这篇“RestTemplate怎么通过Http Basic Auth认证”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一

这篇“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_

这个接口服务是通过Openapiswagger)实现的,所以可以进行在线的访问测试。所以可以先通过页面操作测试一下,再开始下面学习使用RestTemplate访问服务端接口。

三、请求头方式携带认证信息

在HTTP请求头中携带Basic Auth认证的用户名和密码,具体实现参考下文代码注释:

@SpringBootTestclass 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客户端类库的切换

@Configurationpublic 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认证”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: RestTemplate怎么通过HTTP Basic Auth认证

本文链接: https://www.lsjlt.com/news/325013.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • RestTemplate怎么通过HTTP Basic Auth认证
    这篇“RestTemplate怎么通过HTTP Basic Auth认证”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一...
    99+
    2023-06-29
  • RestTemplate如何通过HTTP Basic Auth认证示例说明
    目录一、HttpBasic认证原理说明二、HTTP Basic Auth服务端实现三、请求头方式携带认证信息四、拦截器方式携带认证信息五、进一步简化本文是精讲RestTemplate...
    99+
    2022-11-13
  • Springboot怎么实现通用Auth认证
    这篇文章主要介绍“Springboot怎么实现通用Auth认证”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Springboot怎么实现通用Auth认证”文章能帮助大家解决问题。传统AOP对于这种需...
    99+
    2023-06-08
  • Spring Boot怎么实现通用Auth认证
    这篇文章主要介绍“Spring Boot怎么实现通用Auth认证”,在日常操作中,相信很多人在Spring Boot怎么实现通用Auth认证问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”S...
    99+
    2023-06-29
  • 在Linux下怎么通过WEB认证方式上网
    这篇文章主要介绍“在Linux下怎么通过WEB认证方式上网”,在日常操作中,相信很多人在在Linux下怎么通过WEB认证方式上网问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”在Linux下怎么通过WEB认证方...
    99+
    2023-06-12
  • 怎么通过Nginx反向代理实现kibana登录认证
    本篇内容主要讲解“怎么通过Nginx反向代理实现kibana登录认证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么通过Nginx反向代理实现kibana登录认证”吧!安装Apache Htt...
    99+
    2023-06-27
  • 微服务中怎么通过Feign实现密码安全认证
    本篇文章为大家展示了微服务中怎么通过Feign实现密码安全认证,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。微服务通过Feign调用进行密码安全认证Feign是客户端配置,@FeignClient注...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作