Автентифікація через проксі для клієнтів SPARQL Jena 4.3+
Приєднайте селектор і автентифікатор проксі до HTTP-клієнта JDK, який використовує сучасне виконання запитів Jena.
Для HTTP-стеку Jena на базі JDK, представленого в Jena 4.3, налаштуйте transport, що передається конструктору запитів. Пароль кінцевої точки SPARQL і пароль проксі можуть запитувати різні машини.
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();Цей фрагмент створює виконання запиту. endpointUrl — фактична URL-адреса служби SPARQL; proxyAuthenticator — java.net.Authenticator, який надає застосунок. Запустіть і закрийте виконання запиту через звичайний життєвий цикл запитів застосунку.
У методі getPasswordAuthentication цього автентифікатора повертайте PasswordAuthentication проксі лише тоді, коли getRequestorType() == RequestorType.PROXY і коли хост та порт запиту збігаються з налаштованим посередником. Для не пов'язаних викликів повертайте null. Приєднання цього об'єкта до клієнта залишає вибір локальним для цього клієнта.
Прочитайте, що вимагає проксі
Відповідь 407 вказує на виклик автентифікації проксі. Її заголовок Proxy-Authenticate повідомляє запропоновані схеми; сам статус не відрізняє Basic від NTLM чи іншої схеми.
Порівняйте цю пропозицію з можливостями розгорнутого клієнта JDK і його політикою автентифікації. Надання імені користувача й пароля не додає непідтримуваної схеми. Для цілей HTTPS також перевірте політику JDK jdk.http.auth.tunneling.disabledSchemes; звичайне проксіювання HTTP має окреме налаштування disabledSchemes. Стандартні значення Basic-автентифікації JDK для CONNECT — одна з таких перевірок політики.
Історичні приклади Jena з Apache HttpClient і SimpleNTAuthenticator належать до старшого покоління transport. Якщо корпоративний проксі вимагає механізм автентифікації, недоступний у поточному transport, домовтеся про підтримувану інтеграцію з мережевим адміністратором, а не намагайтеся втиснути ті старі об'єкти автентифікації в сучасний конструктор.