Java:
Gửi một yêu cầu HTTP với xác thực cơ bản
Làm thế nào:
Java làm cho việc gửi yêu cầu HTTP với xác thực cơ bản trở nên khá đơn giản sử dụng lớp HttpURLConnection
. Đây là một ví dụ nhanh:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class BasicAuthRequest {
public static void main(String[] args) {
try {
URL url = new URL("http://example.com/resource");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
String userCredentials = "user:password";
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes(StandardCharsets.UTF_8)));
connection.setRequestProperty("Authorization", basicAuth);
int responseCode = connection.getResponseCode();
System.out.println("Mã Phản Hồi: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} else {
System.out.println("Yêu cầu GET không thành công");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Kết quả Mẫu:
Mã Phản Hồi: 200
{ "message": "Đây là phản hồi từ một tài nguyên được bảo vệ!" }
Tìm hiểu sâu hơn
Xác thực cơ bản đã có từ những ngày đầu của HTTP. Nó hoạt động bằng cách truyền các thông tin đăng nhập mã hóa dạng base64 trong header, làm cho nó đơn giản nhưng không rất an toàn mà không có HTTPS, vì thông tin đăng nhập có thể dễ dàng được giải mã.
Những phương pháp thay thế như OAuth thêm một tầng bảo mật khác bằng cách sử dụng token. Xác thực dựa trên token hiện là lựa chọn được ưu tiên hiện nay, đặc biệt là cho các RESTful APIs.
Khi triển khai xác thực truy cập cơ bản trong Java, cách được khuyến nghị từ Java 11 là sử dụng lớp mới HttpClient
. Nó linh hoạt hơn và hỗ trợ HTTP/2 ngay lập tức. Tuy nhiên, đối với các yêu cầu cơ bản hoặc hệ thống cũ, HttpURLConnection
vẫn là một lựa chọn khả thi.