مصادقة الوكيل لعملاء SPARQL في Jena 4.3+
أرفق محدِّد وكيل ومصادِقًا بعميل HTTP الخاص بـ JDK الذي يستخدمه تنفيذ استعلام Jena الحديث.
مع حزمة HTTP القائمة على JDK في Jena، التي ظهرت في 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 هو عنوان خدمة 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 منفصل. والإعدادات الافتراضية لمصادقة Basic في JDK عند CONNECT أحد فحوص السياسة هذه.
تنتمي أمثلة Jena التاريخية التي تستخدم Apache HttpClient وSimpleNTAuthenticator إلى جيل نقل أقدم. وإذا كان وكيل المؤسسة يتطلب آلية مصادقة غير متاحة في النقل الحالي، فرتّب تكاملًا مدعومًا مع مسؤول الشبكة بدل محاولة تحويل كائنات المصادقة القديمة تلك إلى الباني الحديث.