Per lo stack HTTP di Jena basato su JDK, introdotto in Jena 4.3, configurate il transport passato al builder delle query. La password dell'endpoint SPARQL e la password del proxy possono essere richieste da macchine diverse.

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

Il frammento costruisce un'esecuzione di query. endpointUrl è l'URL reale del servizio SPARQL; proxyAuthenticator è un java.net.Authenticator fornito dall'applicazione. Eseguite e chiudete l'esecuzione della query tramite il normale ciclo di vita delle query dell'applicazione.

Nel metodo getPasswordAuthentication di quell'autenticatore, restituite il PasswordAuthentication del proxy solo quando getRequestorType() == RequestorType.PROXY e quando l'host e la porta richiedenti corrispondono all'intermediario configurato. Restituite null per le richieste non correlate. Collegare questo oggetto al client mantiene la scelta locale a quel client.

Leggete cosa chiede il proxy

Una risposta 407 indica una richiesta di autenticazione proxy. Il suo header Proxy-Authenticate indica gli schemi offerti; lo stato da solo non distingue Basic da NTLM o da un altro schema.

Confrontate quell'offerta con le capacità e la politica di autenticazione del client JDK distribuito. Fornire nome utente e password non aggiunge uno schema non supportato. Per le destinazioni HTTPS, esaminate anche la politica jdk.http.auth.tunneling.disabledSchemes del JDK; il proxy HTTP ordinario ha un'impostazione disabledSchemes separata. I valori predefiniti del JDK per l'autenticazione Basic su CONNECT sono uno di questi controlli di politica.

Gli esempi storici di Jena con Apache HttpClient e SimpleNTAuthenticator appartengono a una generazione di transport precedente. Se il proxy aziendale richiede un meccanismo di autenticazione non disponibile nel transport attuale, concordate un'integrazione supportata con l'amministratore di rete invece di tentare di inserire quei vecchi oggetti di autenticazione nel builder moderno.

Articoli correlati