ការផ្ទៀងផ្ទាត់តាមរយៈប្រូកស៊ីសម្រាប់អតិថិជន SPARQL របស់ Jena 4.3+
ភ្ជាប់ឧបករណ៍ជ្រើសរើស និងឧបករណ៍ផ្ទៀងផ្ទាត់ប្រូកស៊ីទៅអតិថិជន JDK HTTP ដែលការប្រតិបត្តិសំណួរ Jena សម័យថ្មីប្រើប្រាស់។
សម្រាប់ស្តាក់ 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.http.auth.tunneling.disabledSchemes របស់ JDK ផងដែរ; ប្រូកស៊ី HTTP ធម្មតាមានការកំណត់ disabledSchemes ដោយឡែក។ តម្លៃលំនាំដើមរបស់ JDK សម្រាប់ការផ្ទៀងផ្ទាត់ Basic នៅ CONNECT គឺជាការត្រួតពិនិត្យគោលនយោបាយមួយបែបនោះ។
ឧទាហរណ៍ Jena ជាប្រវត្តិសាស្ត្រដែលប្រើ Apache HttpClient និង SimpleNTAuthenticator ជាកម្មសិទ្ធិរបស់ជំនាន់ transport ចាស់ជាង។ ប្រសិនបើប្រូកស៊ីសាជីវកម្មទាមទារយន្តការផ្ទៀងផ្ទាត់ដែលមិនមាននៅក្នុង transport បច្ចុប្បន្ន សូមរៀបចំការរួមបញ្ចូលដែលគាំទ្រជាមួយអ្នកគ្រប់គ្រងបណ្តាញ ជាជាងព្យាយាមញាត់វត្ថុផ្ទៀងផ្ទាត់ចាស់ទាំងនោះទៅក្នុងអ្នកបង្កើតសម័យថ្មី។