使用vert.x的http basic auth

use*_*682 5 java vert.x

我使用内置的httpclient向需要身份验证的外部服务发出"get"查询.更具体地说,我正在尝试向我的服务提交查询.如何在请求中传递用户凭据?我想使用基本的auth而不是处理身份验证令牌.

小智 17

基本身份验证是关于授权标头的.

您应该添加该标头,其值由"basic"(注意空白)和您的login:pass(以冒号分隔)组成,编码在base64中.只有在使用HTTPS时,这才是安全的.

以下是我在vert.x中完成此操作的方法:

HttpClient client = vertx.createHttpClient().setSSL(true)
    .setTrustAll(true) //You may not want to trust them all
    .setHost("api.myawesomeapi.com")
    .setPort(443);
HttpClientRequest clientRequest = client.get("/"+action+"/?"+params, new Handler<HttpClientResponse>() {
            public void handle(final HttpClientResponse response) {
                if (response.statusCode==200){
                    // It worked !
                } else {
                    // Oops
                }
            }
        });

clientRequest.putHeader(HttpHeaders.Names.AUTHORIZATION, "Basic "+base64key);
Run Code Online (Sandbox Code Playgroud)

这里我已经有了base64key,但如果我必须创建它,我会使用类似的东西:

base64key = Base64.encodeBytes(new StringBuilder(apiKey).append(":").append(secretKey).toString().getBytes(), Base64.DONT_BREAK_LINES);
Run Code Online (Sandbox Code Playgroud)

如果您使用POST而不是get,请不要忘记添加所需的标头:

clientRequest.putHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(params.getBytes().length))
        .putHeader(HttpHeaders.Names.CONTENT_TYPE, "application/x-www-form-urlencoded")
        .write(params);
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助

雨果