使用域,用户名和密码连接到远程URL

问题描述 投票:0回答:2

嘿伙计们,这里有问题:我有一个看起来像“ABCD \ michael”的用户名和一个看起来像“密码!6789”的密码。在这种情况下,“ABCD”是域。

使用以下代码,我将401作为响应代码未经授权。我怀疑,在base64编码之前,doublebackslashes没有被转换为单个反斜杠。或者我是以错误的方式使用域名?

我需要帮助才能使这个工作。帮助将不胜感激。

先感谢您!

public int getMeTheResponseCodeOfURL(final URL url) {
    HttpURLConnection httpUrlConnection = null;
    int statusCode = 0;
    String userName = "ABCD\\michael";
    String userPass = "password!6789";
    String UserAndPass = userName + ":" + userPass;
    String userPassBase64 = Base64.getEncoder().encodeToString(UserAndPass.getBytes());

    try {
        httpUrlConnection = (HttpURLConnection) url.openConnection();
        httpUrlConnection.setRequestProperty("Authorization", "Basic " + userPassBase64);
        httpUrlConnection.connect();
        statusCode = httpUrlConnection.getResponseCode();

    } catch (final IOException e) {
        this.log.error("IO Exception! Errormessage: " + e);
    }
    return statusCode;
}
java http authentication base64 authorization
2个回答
1
投票

你可以尝试用%5C替换\符号这是斜杠的编码代码。所以你的用户名将如下所示:

String userName = "ABCD%5Cmichael"

0
投票

另一个尝试是使用UserAndPass.getBytes("UTF-8"),虽然你的UserAndPass字符串只包含US-ASCII字符 - 所以它可能无关紧要 - 但请记住,String.getBytes() [1](没有args)使用默认平台字符集对字符串字节进行编码,这可能不是永远是你想要的。依赖于默认字符集几乎不是一个好主意。

此外,如果“ABCD”是身份验证领域,那么它可能不需要成为UserAndPass字符串的一部分 - 请参阅RFC 7617 [2]

[1] https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#getBytes()

[2] https://tools.ietf.org/html/rfc7617

© www.soinside.com 2019 - 2024. All rights reserved.