Java ပရောက်စီ 407 အမှားများ — CONNECT အတွက် Basic အထောက်အထားစစ်ဆေးမှုကို စစ်ပါ
Java ဝင်ရောက်ခွင့်အချက်အလက်ကို သတ်မှတ်ပရောက်စီအတွက်သာ ကန့်သတ်ပြီး HTTPS CONNECT လိုဏ်ခေါင်းများအတွက် JDK ၏ သီးခြား Basic မူဝါဒကို စစ်ပါ။
407 ထပ်တလဲလဲဖြစ်ခြင်းသည် Java က စကားဝှက်မှား ပို့လိုက်သည်ဟု အမြဲမဆိုလိုပါ။ JDK ၏ ရည်ညွှန်းအကောင်အထည်ဖော်မှုသည် ပုံမှန်အားဖြင့် HTTPS CONNECT လိုဏ်ခေါင်းများအတွက် Basic အထောက်အထားစစ်ဆေးမှုကို ပိတ်ထားသည်။ Basic တစ်မျိုးသာ ပေးသော ပရောက်စီသည် သင်၏ အထောက်အထားစစ်ဆေးရေး callback က ဝင်ရောက်ခွင့်အချက်အလက် မပေးမီပင် ငြင်းပယ်ခံရနိုင်သည်။
ဝင်ရောက်ခွင့်အချက်အလက် callback ၏ အကျုံးဝင်မှုကို ကန့်သတ်ပါ
Authenticator ကို Java HTTP ကလိုင်းယင့် နှင့် ချိတ်ပြီး သတ်မှတ်ထားသော ပရောက်စီအတွက်သာ ကန့်သတ်ပါ။
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 နှင့် ဖြန့်ချိအသုံးချရေးမူဝါဒကို စစ်ပါ။
ပိတ်ထားသောနည်းလမ်းစာရင်းကို စနစ်တစ်ခုလုံးအတွက် အလွတ်လုပ်ခြင်းသည် ပရောက်စီအတွက် အထွေထွေဖြေရှင်းချက် မဟုတ်ပါ။ စာသားအကြည် HTTP ပရောက်စီသို့ ပို့သော Basic ဝင်ရောက်ခွင့်အချက်အလက်ကို ဦးတည်ရာနှင့် နောက်ပိုင်းဖွဲ့သည့် TLS ချိတ်ဆက်မှုက မကာကွယ်ပါ။ ပြောင်းလဲမှုကို အတည်မပြုမီ ပရောက်စီပို့ဆောင်မှု၊ အထောက်အထားစစ်ဆေးနည်းနှင့် ဖြန့်ချိအသုံးချရေးမူဝါဒကို သုံးသပ်ပါ။
JDK ၏ ပါဝင်ပြီးသား အထောက်အထားစစ်ဆေးမှုအကြောင်း မှတ်တမ်းတင်ထားသော အပြုအမူသည်လည်း ပရောက်စီကြေညာသော နည်းလမ်းတိုင်းကို ပံ့ပိုးမည်ဟု ကတိမဟုတ်ပါ။ ကိုယ်တိုင်ပေးသော Authorization သို့မဟုတ် Proxy-Authorization ခေါင်းစီးက အလိုအလျောက် အထောက်အထားစစ်ဆေးသူ၏ စီးဆင်းပုံကို ပြောင်းလဲသည်။ ထို့ကြောင့် callback သည် ဥပမာနှင့် မတူဘဲ အလုပ်လုပ်ပါက ကိုယ်ပိုင်ခေါင်းစီးများကို စစ်ပါ။