JAX-RS REST客户端实现基本身份验证机制

简介: 《JAX-RS REST客户端实现基本身份验证机制》 很多SaaS API项目提供了HTTP访问的基本身份验证机制。因此,本文提供了如何在JAX-RS REST客户端实现基本的访问认证。
《JAX-RS REST客户端实现基本身份验证机制》

很多SaaS API项目提供了HTTP访问的基本身份验证机制。因此,本文提供了如何在JAX-RS REST客户端实现基本的访问认证。有些HTTP客户端库提供了基本身份验证过滤器,使用这些库会更简单。

1、基本的身份验证机制

简单来说,基本的身份验证机制是在服务器端实现的身份验证机制,只需要客户端提供用户名和密码即可,但是它对于HTTP报头格式有一些特殊要求,如下所示:

基本身份验证机制的HTTP Header格式

Authorization: Basic <username:password in base64 encoding>

“Authorization”是报头的名字,它的值是这样,比如”Basic YXBpOmtleS03Y2IzODY4ZWI5MmM2ZzFlZmY3NzY1YWExZDhmNmE0OQ==”。
在值中,Basic是关键字,它不能使用BASE64编码,它紧跟空格,然后才是“用户名+冒号+密码”(即用户名:密码)的BASE64编码后的字符串。

2、Java 8之前的版本构建基本的身份验证

在Java 8之前,要构建基本的身份验证,可以使用javax.xml.bind.DatatypeConverter工具类。比如:

点击(此处)折叠或打开

  1. String username = "myusername";
  2. String password = "myPassword";
  3. String usernameAndPassword = username + ":" + password;
  4. String authorizationHeaderName = "Authorization";
  5. String authorizationHeaderValue = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary( usernameAndPassword.getBytes() );

3、Java 8构建基本的身份验证

Java 8要构建基本的身份验证,可以使用java.util.Base64工具类。比如:

点击(此处)折叠或打开

  1. String username = "myusername";
  2. String password = "myPassword";
  3. String usernameAndPassword = username + ":" + password;
  4. String authorizationHeaderName = "Authorization";
  5. String authorizationHeaderValue = "Basic " + java.util.Base64.getEncoder().encodeToString( usernameAndPassword.getBytes() );

4、通过JAX-RS REST客户端库构建的身份验证

要使用JAX-RS REST客户端库构建的身份验证,可以这样:

点击(此处)折叠或打开

  1. import static org.junit.Assert.*;

  2. import javax.ws.rs.client.Client;
  3. import javax.ws.rs.client.ClientBuilder;
  4. import javax.ws.rs.client.Entity;
  5. import javax.ws.rs.core.MultivaluedHashMap;
  6. import javax.ws.rs.core.MultivaluedMap;
  7. import javax.ws.rs.core.Response;

  8. import org.junit.Test;

  9. public class BasicAuthenticationTest {

  10.     @Test
  11.     public void testBasicAuthentication() {
  12.         //Define basic authentication credential values
  13.         String username = "myusername";
  14.         String password = "myPassword";

  15.         String usernameAndPassword = username + ":" + password;
  16.         String authorizationHeaderName = "Authorization";
  17.         String authorizationHeaderValue = "Basic " + java.util.Base64.getEncoder().encodeToString( usernameAndPassword.getBytes() );

  18.         // Build the form for a post request
  19.         MultivaluedMap< String, String> formParameters = new MultivaluedHashMap();
  20.         formParameters.add( "field1", "fieldValue1" );
  21.         formParameters.add( "field2", "fieldValue2" );

  22.         // Perform a post request
  23.         String restResource = "https://restserver:8080/app-name/rest-api/";
  24.         Client client = ClientBuilder.newClient();
  25.         Response res = client.target( restResource )
  26.             .path( "login" ) // API Module Path
  27.             .request( "application/json" ) // Expected response mime type
  28.             .header( authorizationHeaderName, authorizationHeaderValue ) // The basic authentication header goes here
  29.             .post( Entity.form( formParameters ) ); // Perform a post with the form values

  30.         assertTrue( res.getStatus() == 200 );
  31.     }
  32. }

5、总结

1. 对于JDK 6以上版本,可以使用javax.xml.bind.DatatypeConverter类的printBase64Binary(byte[])静态方法把字节数组编码成BASE64的字符串。
2. Java 8则提供了java.util.Base64类,专用于处理Basic、URL、文件名和MIME等的编解码。

目录
相关文章
|
5月前
|
JSON 中间件 数据格式
在服务器框架中处理 POST 请求
在服务器框架中处理 POST 请求
|
5月前
|
JSON 中间件 数据格式
在自定义服务器框架中处理 POST 请求
在自定义服务器框架中处理 POST 请求
|
5月前
|
数据安全/隐私保护 C++
c++实现http客户端和服务端的开源库以及Base64加密密码
c++实现http客户端和服务端的开源库以及Base64加密密码
|
API 图形学
U3D客户端框架之实现基于UnityWebRequest的Http服务 实现HttpCallBackArgs参数类、HttpRoutine访问器、HttpManager管理器
Unity3D 在2018版本中弃用了WWW请求,使用UnityWebRequest 进行网络请求,这个方法是为了满足今天的 HTTP 通信的需求,而且诞生的新类,相对于WWW这个方法,会更灵活一些,但是用起来却很不方便。
U3D客户端框架之实现基于UnityWebRequest的Http服务 实现HttpCallBackArgs参数类、HttpRoutine访问器、HttpManager管理器
|
XML 存储 JSON
JSON Web Token (JWT),服务端信息传输安全解决方案。
JWT介绍 JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑独立的基于JSON对象在各方之间安全地传输信息的方式。这些信息可以被验证和信任,因为它是数字签名的。JWTs可以使用一个密钥(HMAC算法),或使用RSA的公钥/私钥密钥对对信息进行签名。 让我们进一步解释这个定义的一些概念。
733 0
JSON Web Token (JWT),服务端信息传输安全解决方案。
|
Web App开发
使用ABAP CL_HTTP_CLIENT类消费OData服务时,如何避免CSRF令牌验证失败错误
使用ABAP CL_HTTP_CLIENT类消费OData服务时,如何避免CSRF令牌验证失败错误
使用ABAP CL_HTTP_CLIENT类消费OData服务时,如何避免CSRF令牌验证失败错误
如何查询 ABAP 传输请求(Transport Request)和使用该请求修改了的程序的信息?
如何查询 ABAP 传输请求(Transport Request)和使用该请求修改了的程序的信息?
219 0
如何查询 ABAP 传输请求(Transport Request)和使用该请求修改了的程序的信息?
|
API
Identity4实现服务端+api资源控制+客户端请求
准备写一些关于Identity4相关的东西,最近也比较对这方面感兴趣。所有做个开篇笔记记录一下,以便督促自己下一个技术方案方向 已经写好的入门级别Identity4的服务+api资源访问控制和简单的客户端请求模拟: 1.实现服务端+api资源控制+客户端请求 2.后面准备写单点登录统一认证服务   作者:YanBigFeg —— 颜秉锋 出处:http://www.cnblogs.com/yanbigfeg 本文版权归作者和博客园共有,欢迎转载,转载请标明出处。
1955 0