Autenticación de proxy para clientes SPARQL de Jena 4.3+
Conecte un selector y un autenticador de proxy al cliente HTTP del JDK que usa la ejecución de consultas moderna de Jena.
Para la pila HTTP de Jena basada en el JDK, introducida en Jena 4.3, configure el transporte que se pasa al constructor de consultas. Una contraseña del punto de conexión SPARQL y una contraseña del proxy pueden ser solicitadas por máquinas distintas.
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();El fragmento construye una ejecución de consulta. endpointUrl es la URL real del servicio SPARQL; proxyAuthenticator es un java.net.Authenticator que proporciona la aplicación. Ejecute y cierre la ejecución de la consulta mediante el ciclo de vida habitual de consultas de la aplicación.
En el método getPasswordAuthentication de ese autenticador, devuelva el PasswordAuthentication del proxy solo cuando getRequestorType() == RequestorType.PROXY y cuando el host y el puerto solicitantes coincidan con el intermediario configurado. Devuelva null para los desafíos no relacionados. Adjuntar este objeto al cliente mantiene la elección local a ese cliente.
Lea qué pide el proxy
Una respuesta 407 indica un desafío de autenticación del proxy. Su cabecera Proxy-Authenticate indica los esquemas ofrecidos; el estado por sí solo no distingue Basic de NTLM ni de otro esquema.
Compare esa oferta con las capacidades y la política de autenticación del cliente JDK desplegado. Proporcionar un usuario y una contraseña no añade un esquema no admitido. Para destinos HTTPS, revise también la política jdk.http.auth.tunneling.disabledSchemes del JDK; el proxy HTTP normal tiene un ajuste disabledSchemes aparte. Los valores predeterminados de JDK para la autenticación Basic en CONNECT son una de esas comprobaciones de política.
Los ejemplos históricos de Jena con Apache HttpClient y SimpleNTAuthenticator pertenecen a una generación de transporte anterior. Si el proxy corporativo exige un mecanismo de autenticación que el transporte actual no ofrece, acuerde una integración compatible con el administrador de red en lugar de intentar encajar esos objetos de autenticación antiguos en el constructor moderno.