Proxyautentisering för Jena 4.3+ SPARQL-klienter
Koppla en proxyväljare och en autentiserare till JDK HTTP-klienten som moderna Jena-frågekörningar använder.
För Jenas JDK-baserade HTTP-stack, introducerad i Jena 4.3, konfigurerar du transporten som skickas till frågebyggaren. Ett lösenord för SPARQL-slutpunkten och ett lösenord för proxyn kan efterfrågas av olika 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 frågekörning. endpointUrl är den faktiska URL:en för SPARQL-tjänsten; proxyAuthenticator är en java.net.Authenticator som applikationen tillhandahåller. Kör och stäng frågekörningen via applikationens normala livscykel för frågor.
I autentiserarens getPasswordAuthentication-metod returnerar du proxyns PasswordAuthentication endast när getRequestorType() == RequestorType.PROXY och när värden och porten som frågar matchar den konfigurerade mellanhanden. Returnera null för orelaterade utmaningar. När objektet kopplas till klienten förblir valet lokalt för den klienten.
Läs vad proxyn begär
Ett 407-svar anger en proxyautentiseringsutmaning. Dess Proxy-Authenticate-header talar om vilka scheman som erbjuds; statusen ensam skiljer inte Basic från NTLM eller ett annat schema.
Jämför erbjudandet med den utplacerade JDK-klientens förmåga och autentiseringspolicy. Att ange användarnamn och lösenord lägger inte till ett schema som inte stöds. För HTTPS-mål, undersök även JDK:s jdk.http.auth.tunneling.disabledSchemes-policy; vanlig HTTP-proxy har en separat disabledSchemes-inställning. JDK:s standardvärden för Basic-autentisering vid CONNECT är en sådan policykontroll.
Historiska Jena-exempel med Apache HttpClient och SimpleNTAuthenticator tillhör en äldre transportgeneration. Om företagsproxyn kräver en autentiseringsmekanism som inte är tillgänglig i den nuvarande transporten, kom överens om en integrering som stöds med nätverksadministratören i stället för att försöka pressa in de gamla autentiseringsobjekten i den moderna byggaren.