Java प्रोक्सीका 407 त्रुटिहरू: CONNECT का लागि Basic प्रमाणीकरण जाँच्नुहोस्
Java का प्रवेश विवरणलाई तोकिएको प्रोक्सीमा सीमित राख्नुहोस् र HTTPS CONNECT टनेलका लागि JDK को छुट्टै Basic प्रमाणीकरण नीति जाँच्नुहोस्।
बारम्बार 407 आउनुको अर्थ सधैँ Java ले गलत पासवर्ड पठायो भन्ने हुँदैन। JDK को सन्दर्भ कार्यान्वयनले सामान्यतः HTTPS CONNECT टनेलका लागि Basic प्रमाणीकरण बन्द गर्छ। Basic मात्र दिने प्रोक्सी तपाईंको प्रमाणीकरण callback ले प्रवेश विवरण दिनुअघि नै अस्वीकृत हुन सक्छ।
प्रवेश विवरणको callback को दायरा सीमित राख्नुहोस्
Java HTTP क्लाइन्टमा Authenticator जोड्नुहोस् र यसलाई कन्फिगर गरिएको प्रोक्सीमा सीमित राख्नुहोस्:
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 को व्यवहार उदाहरणभन्दा फरक भए अनुकूलित हेडर जाँच्नुहोस्।