Для 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, арганізуйце падтрыманую інтэграцыю з адміністратарам сеткі замест спробы ўціснуць тыя старыя аб'екты аўтэнтыфікацыі ў сучасны канструктар.

Падобныя артыкулы