កំហុសប្រូកស៊ី Java 407៖ ពិនិត្យការផ្ទៀងផ្ទាត់ Basic សម្រាប់ CONNECT
កំណត់ព័ត៌មានសម្ងាត់ Java ឱ្យប្រើតែជាមួយប្រូកស៊ី ហើយពិនិត្យគោលការណ៍ Basic ដាច់ដោយឡែករបស់ JDK សម្រាប់ផ្លូវរូង HTTPS CONNECT។
ការទទួល 407 ម្តងហើយម្តងទៀត មិនតែងតែមានន័យថា Java បានផ្ញើពាក្យសម្ងាត់ខុសទេ។ ការអនុវត្តយោងរបស់ JDK ជាធម្មតាបិទការផ្ទៀងផ្ទាត់ Basic សម្រាប់ផ្លូវរូង HTTPS CONNECT។ ប្រូកស៊ីដែលផ្តល់តែ Basic អាចត្រូវបានបដិសេធ មុនពេល callback ផ្ទៀងផ្ទាត់របស់អ្នកផ្តល់ព័ត៌មានសម្ងាត់។
កំណត់វិសាលភាពរបស់ callback ព័ត៌មានសម្ងាត់
ភ្ជាប់ Authenticator ទៅ កម្មវិធីភ្ញៀវ HTTP របស់ Java ហើយកំណត់ឱ្យប្រើតែជាមួយប្រូកស៊ីដែលបានកំណត់រចនាសម្ព័ន្ធ៖
String proxyHost = "203.0.113.10";
int proxyPort = 8080;
String password = System.getenv("PROXY_PASSWORD");
if (password == null) {
throw new IllegalStateException("Set PROXY_PASSWORD");
}
java.net.Authenticator auth = new java.net.Authenticator() {
@Override
protected java.net.PasswordAuthentication getPasswordAuthentication() {
if (getRequestorType() == RequestorType.PROXY
&& proxyHost.equals(getRequestingHost())
&& proxyPort == getRequestingPort()) {
return new java.net.PasswordAuthentication(
"proxy-user", password.toCharArray());
}
return null;
}
};
java.net.http.HttpClient client = java.net.http.HttpClient.newBuilder()
.proxy(java.net.ProxySelector.of(
new java.net.InetSocketAddress(proxyHost, proxyPort)))
.authenticator(auth)
.connectTimeout(java.time.Duration.ofSeconds(5))
.build();
នេះជាកូដរៀបចំកម្មវិធីភ្ញៀវមួយ មិនមែនជាឧបករណ៍ផ្ទៀងផ្ទាត់លំនាំដើមសកលទេ។ ជំនួសអាសយដ្ឋានសម្រាប់ឯកសារ ហើយប្រើព័ត៌មានសម្ងាត់ដែលត្រូវបានផ្តល់ពិតប្រាកដសម្រាប់សេវានោះ។ ការត្រួតពិនិត្យប្រភេទអ្នកស្នើ និងចំណុចចុងក្រោយ រារាំង callback ដដែលពីការផ្តល់គណនីប្រូកស៊ីដោយមិនប្រុងប្រយ័ត្ន នៅពេលគេហទំព័រទាមទារការផ្ទៀងផ្ទាត់។
ពិនិត្យថាដំណាក់កាលផ្ទៀងផ្ទាត់ណាមួយបរាជ័យ
JDK មានការកំណត់គ្រោងការណ៍ផ្ទៀងផ្ទាត់ដែលបានបិទដាច់ដោយឡែក សម្រាប់ HTTP ធម្មតាតាមប្រូកស៊ី និងសម្រាប់ផ្លូវរូង CONNECT។ ឈ្មោះពាក់ព័ន្ធគឺ jdk.http.auth.proxying.disabledSchemes និង jdk.http.auth.tunneling.disabledSchemes។
នេះពន្យល់ថាហេតុអ្វីចរាចរណ៍ HTTP អាចផ្ទៀងផ្ទាត់បាន ប៉ុន្តែផ្លូវរូង HTTPS តាមប្រូកស៊ីដដែលបរាជ័យ។ ពិនិត្យ conf/net.properties របស់បរិស្ថានដំណើរការ និងគោលការណ៍ដាក់ឱ្យប្រើ ជំនួសឱ្យការសន្មតថាម៉ាស៊ីនផ្សេងមានតម្លៃលំនាំដើមដែលមានប្រសិទ្ធភាពដូចគ្នា។
ការលុបបញ្ជីគ្រោងការណ៍ដែលបានបិទឱ្យទទេជាសកល មិនមែនជាវិធីជួសជុលប្រូកស៊ីទូទៅទេ។ ព័ត៌មានសម្ងាត់ Basic ដែលផ្ញើទៅប្រូកស៊ី HTTP ជាអត្ថបទច្បាស់ មិនត្រូវបានការពារដោយការតភ្ជាប់ TLS ជាមួយគោលដៅដែលបង្កើតនៅពេលក្រោយទេ។ ពិនិត្យ ការដឹកជញ្ជូនរបស់ប្រូកស៊ី វិធីផ្ទៀងផ្ទាត់ និងគោលការណ៍ដាក់ឱ្យប្រើ មុននឹងអនុម័តការផ្លាស់ប្តូរ។
ឥរិយាបថផ្ទៀងផ្ទាត់ដែលមានស្រាប់ក្នុង JDK និងបានចងក្រងជាឯកសារ ក៏មិនមែនជាការសន្យាថាគាំទ្រគ្រប់គ្រោងការណ៍ដែលប្រូកស៊ីប្រកាសទេ។ បឋមកថា Authorization ឬ Proxy-Authorization ដែលផ្តល់ដោយដៃ ផ្លាស់ប្តូរលំហូររបស់ឧបករណ៍ផ្ទៀងផ្ទាត់ស្វ័យប្រវត្តិ ដូច្នេះពិនិត្យបឋមកថាផ្ទាល់ខ្លួន នៅពេលឥរិយាបថ callback ខុសពីឧទាហរណ៍។