የJena 4.3+ SPARQL ደንበኞች የፕሮክሲ ማረጋገጫ
የፕሮክሲ መራጭና አረጋጋጭን ዘመናዊ Jena ጥያቄ አፈጻጸም ወደሚጠቀመው JDK HTTP ደንበኛ ያያዙ።
በJena 4.3 የጀመረው በJDK ላይ የተመሠረተው የJena HTTP ቁልል ለጥያቄ ገንቢው የሚሰጠውን 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 ትክክለኛው የSPARQL አገልግሎት URL ነው፤ proxyAuthenticator በመተግበሪያው የሚቀርብ java.net.Authenticator ነው። የጥያቄ አፈጻጸሙን በመተግበሪያው የተለመደ የጥያቄ ዑደት አሂድና ዝጋ።
በዚያ authenticator የgetPasswordAuthentication ዘዴ ውስጥ የፕሮክሲውን PasswordAuthentication ይመልሱ በሚከተለው ሁኔታ ብቻ፦ getRequestorType() == RequestorType.PROXY ሲሆን እና የሚጠይቀው አስተናጋጅና ወደብ ከተዋቀረው መካከለኛ ጋር ሲመሳሰል። ላልተዛመዱ ተግዳሮቶች null ይመልሱ። ይህን ነገር ከደንበኛው ጋር ማያያዝ ምርጫው በዚያ ደንበኛ ላይ ብቻ እንዲቆይ ያደርጋል።
ፕሮክሲው ምን እንደሚጠይቅ ይመልከቱ
የ407 ምላሽ የፕሮክሲ ማረጋገጫ ተግዳሮትን ያመለክታል። የProxy-Authenticate አርዕስት የቀረቡትን ዘዴዎች ይነግርዎታል፤ ሁኔታው ብቻውን Basic ከNTLM ወይም ከሌላ ዘዴ አይለይም።
ያንን አቅርቦት ከተሰማራው የJDK ደንበኛ ችሎታዎችና የማረጋገጫ መመሪያ ጋር ያመሳስሉ። የተጠቃሚ ስምና የይለፍ ቃል ማቅረብ የማይደገፍ ዘዴ አይጨምርም። ለHTTPS መዳረሻዎች የJDK jdk.http.auth.tunneling.disabledSchemes መመሪያንም ይመርምሩ፤ የተለመደ HTTP ፕሮክሲ የተለየ disabledSchemes ቅንብር አለው። በCONNECT ለJDK Basic ማረጋገጫ ያሉት ነባሪዎች ከእንደነዚህ የመመሪያ ፍተሻዎች አንዱ ነው።
Apache HttpClient እና SimpleNTAuthenticator የተጠቀሙ ታሪካዊ የJena ምሳሌዎች የቆየ የtransport ትውልድ ናቸው። ድርጅታዊው ፕሮክሲ በአሁኑ transport ውስጥ የማይገኝ የማረጋገጫ ዘዴ ከፈለገ፣ እነዚያን የቆዩ የማረጋገጫ ነገሮች ወደ ዘመናዊው ገንቢ ለመጣል ከመሞከር ይልቅ ከኔትወርክ አስተዳዳሪው ጋር የተደገፈ ውህደት ያዘጋጁ።