Pour la pile HTTP de Jena fondée sur le JDK, introduite dans Jena 4.3, configurez le transport transmis au constructeur de requête. Un mot de passe pour le point de terminaison SPARQL et un mot de passe pour le proxy peuvent être demandés par des machines différentes.

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

Le fragment construit une exécution de requête. endpointUrl est l'URL réelle du service SPARQL ; proxyAuthenticator est un java.net.Authenticator fourni par l'application. Exécutez puis fermez l'exécution de la requête selon le cycle de vie habituel des requêtes de l'application.

Dans la méthode getPasswordAuthentication de cet authentificateur, ne renvoyez le PasswordAuthentication du proxy que lorsque getRequestorType() == RequestorType.PROXY et lorsque l'hôte et le port demandeurs correspondent à l'intermédiaire configuré. Renvoyez null pour les défis sans rapport. Attacher cet objet au client garde le choix local à ce client.

Lisez ce que le proxy demande

Une réponse 407 signale un défi d'authentification par proxy. Son en-tête Proxy-Authenticate indique les schémas proposés ; le statut seul ne distingue pas Basic de NTLM ni d'un autre schéma.

Comparez cette offre aux capacités et à la politique d'authentification du client JDK déployé. Fournir un nom d'utilisateur et un mot de passe n'ajoute pas de schéma non pris en charge. Pour les destinations HTTPS, examinez aussi la politique jdk.http.auth.tunneling.disabledSchemes du JDK ; le proxy HTTP ordinaire dispose d'un réglage disabledSchemes distinct. Les valeurs par défaut du JDK pour l'authentification Basic sur CONNECT sont l'un de ces contrôles de politique.

Les exemples historiques de Jena avec Apache HttpClient et SimpleNTAuthenticator relèvent d'une génération de transport plus ancienne. Si le proxy d'entreprise exige un mécanisme d'authentification indisponible dans le transport actuel, convenez d'une intégration prise en charge avec l'administrateur réseau plutôt que de tenter de forcer ces anciens objets d'authentification dans le constructeur moderne.

Articles similaires