Tarpinio serverio autentifikavimas Jena 4.3+ SPARQL klientams
Priskirkite tarpinio serverio parinkiklį ir autentifikatorių JDK HTTP klientui, kurį naudoja šiuolaikinis Jena užklausų vykdymas.
Jena HTTP sluoksniui, pagrįstam JDK ir pristatytam Jena 4.3 versijoje, sukonfigūruokite transportą, kuris perduodamas užklausos kūrėjui. SPARQL galinio taško slaptažodžio ir tarpinio serverio slaptažodžio gali reikalauti skirtingos mašinos.
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();Šis fragmentas sukuria užklausos vykdymą. endpointUrl yra tikrasis SPARQL paslaugos URL; proxyAuthenticator yra programos pateikiamas java.net.Authenticator. Paleiskite ir uždarykite užklausos vykdymą įprastu programos užklausų gyvavimo ciklu.
To autentifikatoriaus metode getPasswordAuthentication grąžinkite tarpinio serverio PasswordAuthentication tik tada, kai getRequestorType() == RequestorType.PROXY ir kai užklausą siunčiantis mazgas bei prievadas atitinka sukonfigūruotą tarpininką. Nesusijusiems iššūkiams grąžinkite null. Priskyrus šį objektą klientui, pasirinkimas lieka vietinis tam klientui.
Skaitykite, ko prašo tarpinis serveris
407 atsakymas nurodo tarpinio serverio autentifikavimo iššūkį. Jo antraštė Proxy-Authenticate nurodo siūlomas schemas; vien būsena neatskiria Basic nuo NTLM ar kitos schemos.
Palyginkite šį pasiūlymą su įdiegto JDK kliento galimybėmis ir autentifikavimo politika. Vartotojo vardo ir slaptažodžio pateikimas neprideda nepalaikomos schemos. HTTPS paskirties vietoms taip pat patikrinkite JDK politiką jdk.http.auth.tunneling.disabledSchemes; įprastas HTTP tarpinis serveris turi atskirą disabledSchemes nuostatą. JDK Basic autentifikavimo numatytosios reikšmės CONNECT atveju yra vienas tokių politikos patikrinimų.
Istoriniai Jena pavyzdžiai su Apache HttpClient ir SimpleNTAuthenticator priklauso senesnei transporto kartai. Jei įmonės tarpinis serveris reikalauja autentifikavimo mechanizmo, kurio dabartiniame transporte nėra, suderinkite palaikomą integraciją su tinklo administratoriumi, o ne bandykite tuos senus autentifikavimo objektus įsprausti į šiuolaikinį kūrėją.