Autenticación por proxy para clientes SPARQL de Jena 4.3+
Engade un selector e un autenticador de proxy ao cliente HTTP do JDK que usa a execución de consultas moderna de Jena.
Para a pila HTTP de Jena baseada no JDK, introducida en Jena 4.3, configure o transporte que se pasa ao construtor de consultas. Un contrasinal do punto de acceso SPARQL e un contrasinal do proxy poden ser solicitados 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();O fragmento constrúe unha execución de consulta. endpointUrl é o URL real do servizo SPARQL; proxyAuthenticator é un java.net.Authenticator fornecido pola aplicación. Executa e pecha a execución da consulta mediante o ciclo de vida habitual de consultas da aplicación.
No método getPasswordAuthentication dese autenticador, devolve o PasswordAuthentication do proxy só cando getRequestorType() == RequestorType.PROXY e cando o host e o port solicitantes coinciden co intermediario configurado. Devolve null para os desafíos non relacionados. Engadir este obxecto ao cliente mantén a escolla local a ese cliente.
Le o que pide o proxy
Unha resposta 407 indica un desafío de autenticación do proxy. A súa cabeceira Proxy-Authenticate indica os esquemas ofrecidos; o estado por si só non distingue Basic de NTLM nin doutro esquema.
Compara esa oferta coas capacidades e a política de autenticación do cliente JDK despregado. Fornecer un nome de usuario e un contrasinal non engade un esquema non admitido. Para destinos HTTPS, revisa tamén a política jdk.http.auth.tunneling.disabledSchemes do JDK; o proxy HTTP común ten un axuste disabledSchemes á parte. Os valores predeterminados do JDK para a autenticación Basic en CONNECT son unha desas comprobacións de política.
Os exemplos históricos de Jena con Apache HttpClient e SimpleNTAuthenticator pertencen a unha xeración de transporte anterior. Se o proxy corporativo esixe un mecanismo de autenticación que o transporte actual non ofrece, acorda unha integración compatible co administrador de rede en lugar de tentar encaixar eses obxectos de autenticación antigos no construtor moderno.