使用域,用户名和密码

时间:2019-02-22 14:03:28

标签: java http authentication base64 authorization

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

使用以下代码,即时获取401作为响应代码。 我怀疑,双反斜杠不会在base64编码之前转换为单个反斜杠。还是我以错误的方式使用域?

我需要帮助才能正常工作。帮助将不胜感激。

提前谢谢!

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;
}

2 个答案:

答案 0 :(得分:1)

您能否尝试将\符号替换为%5C 这是斜杠的编码代码。 因此,您的用户名将如下所示:

String userName = "ABCD%5Cmichael"

答案 1 :(得分:0)

另一种尝试是使用UserAndPass.getBytes("UTF-8"),尽管您的UserAndPass字符串仅包含US-ASCII字符-可能没关系-但请记住String.getBytes() [1](无参数)对使用默认平台字符集的字符串字节,这可能并不总是您想要的。依靠默认字符集很少是一个好主意。

如果“ 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