Für den JDK-basierten HTTP-Stack von Jena, eingeführt in Jena 4.3, konfigurieren Sie den Transport, der an den Query-Builder übergeben wird. Ein Passwort für den SPARQL-Endpunkt und ein Passwort für den Proxy können von unterschiedlichen Maschinen verlangt werden.

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();

Das Fragment baut eine Abfrageausführung auf. endpointUrl ist die tatsächliche URL des SPARQL-Dienstes; proxyAuthenticator ist ein java.net.Authenticator, den die Anwendung bereitstellt. Führen Sie die Abfrageausführung aus und schließen Sie sie über den normalen Abfrage-Lebenszyklus der Anwendung.

Geben Sie in der Methode getPasswordAuthentication dieses Authenticators die PasswordAuthentication des Proxys nur dann zurück, wenn getRequestorType() == RequestorType.PROXY gilt und wenn anfragender Host und Port zum konfigurierten Vermittler passen. Für unbezogene Aufforderungen geben Sie null zurück. Wird dieses Objekt an den Client gebunden, bleibt die Auswahl lokal für diesen Client.

Lesen Sie, was der Proxy verlangt

Eine 407-Antwort kennzeichnet eine Proxy-Authentifizierungsaufforderung. Ihr Proxy-Authenticate-Header nennt die angebotenen Verfahren; der Status allein unterscheidet Basic nicht von NTLM oder einem anderen Verfahren.

Vergleichen Sie dieses Angebot mit den Fähigkeiten des eingesetzten JDK-Clients und seiner Authentifizierungsrichtlinie. Benutzername und Passwort bereitzustellen, fügt kein nicht unterstütztes Verfahren hinzu. Prüfen Sie bei HTTPS-Zielen zusätzlich die Richtlinie jdk.http.auth.tunneling.disabledSchemes des JDK; gewöhnliches HTTP-Proxying hat eine separate disabledSchemes-Einstellung. Die Standardwerte des JDK für Basic-Authentifizierung bei CONNECT sind eine solche Richtlinienprüfung.

Historische Jena-Beispiele mit Apache HttpClient und SimpleNTAuthenticator gehören zu einer älteren Transportgeneration. Verlangt der Unternehmensproxy einen Authentifizierungsmechanismus, den der aktuelle Transport nicht bietet, vereinbaren Sie eine unterstützte Integration mit dem Netzwerkadministrator, statt zu versuchen, diese alten Authentifizierungsobjekte in den modernen Builder zu zwängen.

Ähnliche Artikel