问题描述
大家好,这里出现以下问题:我的用户名看起来像“ 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;
}
1楼
您能否尝试将\\符号替换为%5C,这是斜杠的编码代码。 因此,您的用户名将如下所示:
String userName = "ABCD%5Cmichael"
2楼
尝试尝试的另一种方法是使用UserAndPass.getBytes("UTF-8")
,尽管您的UserAndPass字符串仅包含US-ASCII字符-因此可能没有关系-但请记住String.getBytes()
[1](无参数)使用默认的平台字符集对字符串字节进行编码,这可能并不总是您想要的。
依靠默认字符集很少是一个好主意。
同样,如果“ ABCD”是身份验证领域,则它可能不必成为UserAndPass字符串的一部分-请参阅RFC 7617 [2]
[1]
[2]