【问题标题】:http basic auth with vert.x带有 vert.x 的 http 基本身份验证
【发布时间】:2013-04-23 18:47:14
【问题描述】:

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

【问题讨论】:

  • httpclient 是一个 Jakarta 框架,还有一些其他的框架叫同样的东西。内置对 URLConnection 的支持。什么意思?
  • 我指的是 vert.x 中内置的 httpclinet 实例化为: HttpClient httpClient = vertx.createHttpClient();

标签: java vert.x


【解决方案1】:

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

您应该在该标头中添加一个值,该值由“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);

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

base64key = Base64.encodeBytes(new StringBuilder(apiKey).append(":").append(secretKey).toString().getBytes(), Base64.DONT_BREAK_LINES);

如果你使用 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);

希望对你有帮助

雨果

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2021-03-21
    相关资源
    最近更新 更多