Voor de JDK-gebaseerde HTTP-stack van Jena, geïntroduceerd in Jena 4.3, configureert u het transport dat aan de querybuilder wordt doorgegeven. Een wachtwoord voor het SPARQL-eindpunt en een wachtwoord voor de proxy kunnen door verschillende machines worden gevraagd.

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

Het fragment bouwt een query-uitvoering. endpointUrl is de werkelijke URL van de SPARQL-dienst; proxyAuthenticator is een java.net.Authenticator die de applicatie levert. Voer de query-uitvoering uit en sluit deze via de normale query-levenscyclus van de applicatie.

Geef in de methode getPasswordAuthentication van die authenticator de PasswordAuthentication van de proxy alleen terug wanneer getRequestorType() == RequestorType.PROXY en wanneer de vragende host en poort overeenkomen met de geconfigureerde tussenpartij. Geef null terug voor ongerelateerde uitdagingen. Door dit object aan de client te koppelen, blijft de keuze lokaal bij die client.

Lees wat de proxy vraagt

Een 407-respons duidt op een proxy-authenticatie-uitdaging. De Proxy-Authenticate-header vermeldt de aangeboden schema's; de status alleen onderscheidt Basic niet van NTLM of een ander schema.

Vergelijk dat aanbod met de mogelijkheden en het authenticatiebeleid van de uitgerolde JDK-client. Een gebruikersnaam en wachtwoord opgeven voegt geen niet-ondersteund schema toe. Onderzoek voor HTTPS-bestemmingen ook het jdk.http.auth.tunneling.disabledSchemes-beleid van de JDK; gewone HTTP-proxy heeft een aparte disabledSchemes-instelling. De standaardwaarden van de JDK voor Basic-authenticatie bij CONNECT zijn een dergelijke beleidscontrole.

Historische Jena-voorbeelden met Apache HttpClient en SimpleNTAuthenticator horen bij een oudere transportgeneratie. Als de bedrijfsproxy een authenticatiemechanisme eist dat in het huidige transport niet beschikbaar is, regel dan een ondersteunde integratie met de netwerkbeheerder in plaats van die oude authenticatieobjecten in de moderne builder te proberen persen.

Gerelateerde artikelen