Autenticació de proxy per als clients SPARQL de Jena 4.3+
Adjunteu un selector i un autenticador de proxy al client HTTP del JDK que fa servir l'execució de consultes moderna de Jena.
Per a la pila HTTP de Jena basada en el JDK, introduïda a Jena 4.3, configureu el transport que es passa al constructor de consultes. Una màquina pot demanar la contrasenya del punt final SPARQL i una altra la contrasenya del proxy.
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 fragment construeix una execució de consulta. endpointUrl és l'URL real del servei SPARQL; proxyAuthenticator és un java.net.Authenticator que proporciona l'aplicació. Executeu i tanqueu l'execució de la consulta seguint el cicle de vida habitual de les consultes de l'aplicació.
Al mètode getPasswordAuthentication d'aquest autenticador, retorneu el PasswordAuthentication del proxy només quan getRequestorType() == RequestorType.PROXY i quan l'amfitrió i el port sol·licitants coincideixin amb l'intermediari configurat. Retorneu null per als reptes no relacionats. Adjuntar aquest objecte al client manté l'elecció local en aquell client.
Llegiu què demana el proxy
Una resposta 407 indica un repte d'autenticació del proxy. La seva capçalera Proxy-Authenticate indica els esquemes oferts; l'estat per si sol no distingeix Basic de NTLM ni de cap altre esquema.
Compareu aquesta oferta amb les capacitats i la política d'autenticació del client JDK desplegat. Proporcionar un nom d'usuari i una contrasenya no afegeix cap esquema no admès. Per a destinacions HTTPS, reviseu també la política jdk.http.auth.tunneling.disabledSchemes del JDK; el proxy HTTP ordinari té un paràmetre disabledSchemes a part. Els valors per defecte de Jdk per a l'autenticació Basic a CONNECT són una d'aquestes comprovacions de política.
Els exemples històrics de Jena amb Apache HttpClient i SimpleNTAuthenticator pertanyen a una generació de transport anterior. Si el proxy corporatiu exigeix un mecanisme d'autenticació que el transport actual no ofereix, acordeu una integració compatible amb l'administrador de xarxa en lloc d'intentar encabir aquells objectes antics al constructor modern.