Uwierzytelnianie przez proxy dla klientów SPARQL Jena 4.3+
Dołącz selektor i uwierzytelniacz proxy do klienta HTTP JDK używanego przez nowoczesne wykonywanie zapytań Jena.
Dla stosu HTTP Jeny opartego na JDK, wprowadzonego w Jena 4.3, skonfiguruj transport przekazywany do konstruktora zapytań. Hasło punktu końcowego SPARQL i hasło proxy mogą być wymagane przez różne maszyny.
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();Ten fragment buduje wykonanie zapytania. endpointUrl to rzeczywisty adres usługi SPARQL; proxyAuthenticator to java.net.Authenticator dostarczany przez aplikację. Uruchom i zamknij wykonanie zapytania w zwykłym cyklu życia zapytań aplikacji.
W metodzie getPasswordAuthentication tego uwierzytelniacza zwracaj PasswordAuthentication proxy tylko wtedy, gdy getRequestorType() == RequestorType.PROXY i gdy żądający host oraz port odpowiadają skonfigurowanemu pośrednikowi. Dla niepowiązanych wyzwań zwracaj null. Dołączenie tego obiektu do klienta utrzymuje wybór lokalnie w tym kliencie.
Przeczytaj, czego żąda proxy
Odpowiedź 407 oznacza wyzwanie uwierzytelniania proxy. Jej nagłówek Proxy-Authenticate informuje o oferowanych schematach; sam status nie odróżnia Basic od NTLM ani innego schematu.
Porównaj tę ofertę z możliwościami wdrożonego klienta JDK i jego polityką uwierzytelniania. Podanie nazwy użytkownika i hasła nie dodaje nieobsługiwanego schematu. Dla celów HTTPS sprawdź także politykę jdk.http.auth.tunneling.disabledSchemes JDK; zwykłe proxy HTTP ma osobną ustawienie disabledSchemes. Domyślne wartości uwierzytelniania Basic w JDK dla CONNECT to jedno z takich sprawdzeń polityki.
Historyczne przykłady Jeny z Apache HttpClient i SimpleNTAuthenticator należą do starszej generacji transportu. Jeśli firmowe proxy wymaga mechanizmu uwierzytelniania niedostępnego w obecnym transporcie, uzgodnij wspieraną integrację z administratorem sieci, zamiast próbować wepchnąć te stare obiekty uwierzytelniania do nowoczesnego konstruktora.