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.

Powiązane artykuły