Proxy-autentisering for Jena 4.3+ SPARQL-klienter
Koble en proxyvelger og en autentiserer til JDK HTTP-klienten som moderne Jena-spørringskjøring bruker.
For Jenas JDK-baserte HTTP-stack, introdusert i Jena 4.3, konfigurerer du transporten som sendes til spørringsbyggeren. Et passord for SPARQL-endepunktet og et passord for proxyen kan bli etterspurt av ulike maskiner.
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();Utdraget bygger en spørringskjøring. endpointUrl er den faktiske URL-en til SPARQL-tjenesten; proxyAuthenticator er en java.net.Authenticator som applikasjonen tilbyr. Kjør og lukk spørringskjøringen gjennom applikasjonens vanlige livssyklus for spørringer.
I autentisererens getPasswordAuthentication-metode returnerer du proxyens PasswordAuthentication bare når getRequestorType() == RequestorType.PROXY og når verten og porten som spør samsvarer med den konfigurerte mellommannen. Returner null for urelaterte utfordringer. Når objektet knyttes til klienten, holder valget seg lokalt for den klienten.
Les hva proxyen ber om
Et 407-svar angir en proxyautentiseringsutfordring. Proxy-Authenticate-headeren forteller hvilke skjemaer som tilbys; statusen alene skiller ikke Basic fra NTLM eller et annet skjema.
Sammenlign tilbudet med egenskapene og autentiseringspolicyen til JDK-klienten som er satt i drift. Å oppgi brukernavn og passord legger ikke til et skjema som ikke støttes. For HTTPS-mål må du også undersøke jdk.http.auth.tunneling.disabledSchemes-policyen til JDK; vanlig HTTP-proxy har en egen disabledSchemes-innstilling. JDKs standardverdier for Basic-autentisering ved CONNECT er en slik policysjekk.
Historiske Jena-eksempler med Apache HttpClient og SimpleNTAuthenticator tilhører en eldre transportgenerasjon. Hvis bedriftsproxyen krever en autentiseringsmekanisme som ikke er tilgjengelig i dagens transport, avtal en støttet integrasjon med nettverksadministratoren i stedet for å prøve å presse de gamle autentiseringsobjektene inn i den moderne byggeren.