Автентикација преку прокси за SPARQL клиенти на Jena 4.3+
Прикачете избирач и автентикатор за прокси на JDK HTTP клиентот што го користи современото извршување на барања во Jena.
За HTTP слојот на Jena заснован на JDK, воведен во Jena 4.3, конфигурирајте го транспортот што се предава на градителот на барања. Лозинка за 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.http.auth.tunneling.disabledSchemes на JDK; обичното HTTP проксирање има одделно поставување disabledSchemes. Стандардните вредности на JDK за Basic автентикација при CONNECT се една таква проверка на политиката.
Историските примери на Jena со Apache HttpClient и SimpleNTAuthenticator припаѓаат на постара генерација транспорт. Ако корпоративното прокси бара механизам за автентикација што не е достапен во тековниот транспорт, договорете поддржана интеграција со мрежниот администратор наместо да се обидувате тие стари објекти за автентикација да ги вметнете во современиот градител.