Proxy-autentisering for Jena 4.3+ SPARQL-klientar
Knyt ein proxyveljar og ein autentiserar til JDK HTTP-klienten som moderne Jena-spørjingskøyring nyttar.
For den JDK-baserte HTTP-stakken til Jena, innført i Jena 4.3, set du opp transporten som vert gjeven til spørjebyggjaren. Eit passord til SPARQL-endepunktet og eit passord til proxyen kan verta spurde etter av ulike maskinar.
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 byggjer ei spørjingskøyring. endpointUrl er den faktiske URL-en til SPARQL-tenesta; proxyAuthenticator er ein java.net.Authenticator som programmet leverer. Køyr og lukk spørjingskøyringa gjennom den vanlege livssyklusen for spørjingar i programmet.
I getPasswordAuthentication-metoden til autentiseraren returnerer du PasswordAuthentication til proxyen berre når getRequestorType() == RequestorType.PROXY og når verten og porten som spør passar med den oppsette mellommannen. Returner null for urelaterte utfordringar. Når objektet vert knytt til klienten, held valet seg lokalt for den klienten.
Les kva proxyen ber om
Eit 407-svar viser til ei proxyautentiseringsutfordring. Proxy-Authenticate-hovudet fortel kva skjema som vert tilbodne; statusen åleine skil ikkje Basic frå NTLM eller eit anna skjema.
Samanlikn tilbodet med eigenskapane og autentiseringspolitikken til JDK-klienten som er sett i drift. Å oppgje brukarnamn og passord legg ikkje til eit skjema som ikkje er støtta. For HTTPS-mål må du òg granske jdk.http.auth.tunneling.disabledSchemes-politikken til JDK; vanleg HTTP-proxy har ei eiga disabledSchemes-innstilling. Standardverdiane til JDK for Basic-autentisering ved CONNECT er ein slik politikksjekk.
Historiske Jena-døme med Apache HttpClient og SimpleNTAuthenticator høyrer til ei eldre transportgenerasjon. Viss føretaksproxyen krev ein autentiseringsmekanisme som ikkje finst i den noverande transporten, avtalar du ei støtta integrering med nettverksadministratoren i staden for å prøve å tvinge dei gamle autentiseringsobjekta inn i den moderne byggjaren.