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

《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等的编解码。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以按照以下步骤将JAX-WS接口替换为JAX-RS接口: 1. 创建JAX-RS接口:创建一个新的Java接口来定义您的JAX-RS服务。在接口上使用`@Path`注解指定资源的URL路径。 ```java import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/your-resource") public interface YourResource { @GET @Produces(MediaType.APPLICATION_JSON) String getResource(); } ``` 2. 实现JAX-RS接口:创建一个类来实现您的JAX-RS接口,并实现接口中定义的方法。 ```java public class YourResourceImpl implements YourResource { @Override public String getResource() { // 实现您的业务逻辑 return "Hello JAX-RS!"; } } ``` 3. 注册JAX-RS服务:将您的JAX-RS服务注册到应用程序中。这可以通过创建一个`javax.ws.rs.core.Application`子类并在其中注册资源类来完成。 ```java import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; import java.util.HashSet; import java.util.Set; @ApplicationPath("/api") public class YourApplication extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> classes = new HashSet<>(); classes.add(YourResourceImpl.class); return classes; } } ``` 4. 配置JAX-RS:根据您使用的应用程序服务器,将JAX-RS实现(如Jersey或RestEasy)添加到您的应用程序的构建配置文件中。您还需要确保在应用程序服务器上正确配置JAX-RS。 5. 测试JAX-RS接口:启动您的应用程序服务器,并使用JAX-RS客户端或浏览器等工具测试您的JAX-RS接口。 请注意,以上步骤是一般的指导,具体步骤可能因您使用的框架和工具而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值