Jena 4.3+ SPARQL क्लायंट के लिए प्रॉक्सी प्रमाणीकरण
आधुनिक Jena क्वेरी निष्पादन द्वारा उपयोग किए जाने वाले JDK HTTP क्लायंट से प्रॉक्सी चयनकर्ता और प्रमाणक जोड़ें।
Jena 4.3 में पेश किए गए Jena के JDK-आधारित 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 है। क्वेरी निष्पादन को अनुप्रयोग के सामान्य क्वेरी जीवनचक्र से चलाएँ और बंद करें।
उस प्रमाणक की 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 में उपलब्ध नहीं है, तो उन पुराने प्रमाणीकरण ऑब्जेक्ट को आधुनिक बिल्डर में ठूँसने का प्रयास करने के बजाय नेटवर्क प्रशासक के साथ समर्थित एकीकरण तय करें।