tôi đang làm một số xác thực HTTP đơn giản và nhận được mộtJava: lấy URL với HTTPBasic Xác thực
java.lang.IllegalArgumentException: Illegal character(s) in message header value: Basic OGU0ZTc5ODBk(...trimmed from 76 chars...)
(...more password data...)
mà tôi nghĩ là do tôi có một tên người dùng và mật khẩu rất dài và bộ mã hóa kết thúc tốt đẹp nó với một \n
tại 76 ký tự. Có cách nào tôi có thể vượt qua chuyện này không? URL chỉ hỗ trợ Xác thực cơ bản HTTP.
Đây là mã của tôi:
private class UserPassAuthenticator extends Authenticator {
String user;
String pass;
public UserPassAuthenticator(String user, String pass) {
this.user = user;
this.pass = pass;
}
// This method is called when a password-protected URL is accessed
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, pass.toCharArray());
}
}
private String fetch(StoreAccount account, String path) throws IOException {
Authenticator.setDefault(new UserPassAuthenticator(account.getCredentials().getLogin(), account.getCredentials().getPassword()));
URL url = new URL("https", account.getStoreUrl().replace("http://", ""), path);
System.out.println(url);
URLConnection urlConn = url.openConnection();
Object o = urlConn.getContent();
if (!(o instanceof String))
throw new IOException("Wrong Content-Type on " + url.toString());
// Remove the authenticator back to the default
Authenticator.setDefault(null);
return (String) o;
}
Thông báo an ninh: nếu tên sử dụng và mật khẩu thông qua HTTP, cả hai mọi thứ được gửi dưới dạng chuỗi rõ ràng. Tốt hơn là sử dụng xác thực khác nhau (biểu mẫu, POST) và giao thức truyền tải (HTTPS, H2). – tfb785