Xác thực proxy cho các máy khách SPARQL của Jena 4.3+
Gắn bộ chọn và bộ xác thực proxy vào máy khách HTTP của JDK mà quá trình thực thi truy vấn Jena hiện đại sử dụng.
Đối với ngăn xếp HTTP của Jena dựa trên JDK, được giới thiệu trong Jena 4.3, hãy cấu hình transport được truyền cho bộ dựng truy vấn. Mật khẩu của điểm cuối SPARQL và mật khẩu của proxy có thể được các máy khác nhau yêu cầu.
import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.http.HttpClient;
import org.apache.jena.sparql.exec.http.QueryExecutionHTTP;
var http = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("proxy.example", 8080)))
.authenticator(proxyAuthenticator)
.build();
var execution = QueryExecutionHTTP.service(endpointUrl)
.httpClient(http)
.query("ASK { ?s ?p ?o }")
.build();Đoạn này dựng một lần thực thi truy vấn. endpointUrl là URL thực tế của dịch vụ SPARQL; proxyAuthenticator là một java.net.Authenticator do ứng dụng cung cấp. Hãy chạy và đóng lần thực thi truy vấn theo vòng đời truy vấn thông thường của ứng dụng.
Trong phương thức getPasswordAuthentication của bộ xác thực đó, chỉ trả về PasswordAuthentication của proxy khi getRequestorType() == RequestorType.PROXY và khi máy chủ cùng cổng yêu cầu khớp với trung gian đã cấu hình. Trả về null cho các thách thức không liên quan. Gắn đối tượng này vào máy khách giữ lựa chọn cục bộ trong máy khách đó.
Đọc xem proxy đang yêu cầu gì
Phản hồi 407 cho biết một thách thức xác thực proxy. Tiêu đề Proxy-Authenticate của nó cho biết các lược đồ được chào; chỉ trạng thái thì không phân biệt Basic với NTLM hay lược đồ khác.
Đối chiếu lời chào đó với năng lực và chính sách xác thực của máy khách JDK đã triển khai. Việc cung cấp tên người dùng và mật khẩu không thêm lược đồ không được hỗ trợ. Với đích HTTPS, hãy kiểm tra cả chính sách jdk.http.auth.tunneling.disabledSchemes của JDK; proxy HTTP thông thường có thiết lập disabledSchemes riêng. Các giá trị mặc định xác thực Basic của JDK cho CONNECT là một trong những lần kiểm tra chính sách đó.
Các ví dụ Jena lịch sử dùng Apache HttpClient và SimpleNTAuthenticator thuộc về một thế hệ transport cũ hơn. Nếu proxy của doanh nghiệp yêu cầu một cơ chế xác thực không có trong transport hiện tại, hãy thỏa thuận một tích hợp được hỗ trợ với quản trị viên mạng thay vì cố nhét những đối tượng xác thực cũ đó vào bộ dựng hiện đại.