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

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/46725551 《JAX-RS REST客户端实现基本身份验证机制》作者:chszs,版权所有,未经同意,不得转载。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/46725551

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

作者:chszs,版权所有,未经同意,不得转载。博主主页:http://blog.csdn.net/chszs

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

1、基本的身份验证机制

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

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

Authorization: Basic

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

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

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

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

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

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

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

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

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

import static org.junit.Assert.*;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;

import org.junit.Test;

public class BasicAuthenticationTest {

    @Test
    public void testBasicAuthentication() {
        //Define basic authentication credential values
        String username = "myusername";
        String password = "myPassword";

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

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

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

        assertTrue( res.getStatus() == 200 );
    }
}

5、总结

  1. 对于JDK 6以上版本,可以使用javax.xml.bind.DatatypeConverter类的printBase64Binary(byte[])静态方法把字节数组编码成BASE64的字符串。
  2. Java 8则提供了java.util.Base64类,专用于处理Basic、URL、文件名和MIME等的编解码。
目录
相关文章
|
10月前
|
JSON 网络协议 API
PRC和HTTP(rest)过程的区别
PRC和HTTP(rest)过程的区别
|
4月前
|
设计模式 IDE API
C# 一分钟浅谈:GraphQL 客户端调用
本文介绍了如何在C#中调用GraphQL API,涵盖基本步骤、常见问题及解决方案。首先,通过安装`GraphQL.Client`库并创建客户端实例,连接到GraphQL服务器。接着,展示了如何编写查询和突变,以及处理查询语法错误、变量类型不匹配等常见问题。最后,通过具体案例(如管理用户和订单)演示了如何在实际项目中应用这些技术,帮助开发者更高效地利用GraphQL。
91 38
C# 一分钟浅谈:GraphQL 客户端调用
|
4月前
|
XML Java Maven
WebService客户端调用的5种常见方式
本文介绍了在Java中创建和调用WebService的方法,包括服务端的搭建、配置类的添加以及客户端的多种调用方式(如使用JDK原生代码、wsimport命令、动态调用、代理工厂及HttpClient)。文中详细展示了每种方法的实现步骤和示例代码,强调了服务端与客户端参数实体类字段的兼容性,并推荐使用代理工厂方式进行调用。
402 0
WebService客户端调用的5种常见方式
|
10月前
|
前端开发 API 网络架构
RESTful接口与http协议状态表述
该文介绍了RESTful风格API的好处和设计原则。RESTful API以资源为中心,通过HTTP方法(GET, POST, PUT, DELETE)表示操作,利用状态码反馈操作结果。它简化了客户端与服务端的交互,提供了一种通用规范,减少沟通成本。设计要点包括:URI描述资源,HTTP方法体现操作,使用标准HTTP状态码,GET不改变数据,使用复数名词,支持复杂资源关系,可选实现HATEOAS,以及接口版本管理。
108 0
|
API 图形学
U3D客户端框架之实现基于UnityWebRequest的Http服务 实现HttpCallBackArgs参数类、HttpRoutine访问器、HttpManager管理器
Unity3D 在2018版本中弃用了WWW请求,使用UnityWebRequest 进行网络请求,这个方法是为了满足今天的 HTTP 通信的需求,而且诞生的新类,相对于WWW这个方法,会更灵活一些,但是用起来却很不方便。
U3D客户端框架之实现基于UnityWebRequest的Http服务 实现HttpCallBackArgs参数类、HttpRoutine访问器、HttpManager管理器
|
存储 负载均衡 安全
|
缓存 Java 应用服务中间件
|
缓存 负载均衡 Java
代理和 Session 机制|学习笔记
快速学习代理和 Session 机制
代理和 Session 机制|学习笔记
|
缓存 负载均衡 Java
|
存储 算法 前端开发
Python Web开发(九):session|token 验证客户端请求
Python Web开发(九):session|token 验证客户端请求
451 0

热门文章

最新文章