Java-proxyfoute 407: Kontroleer Basic-stawing vir CONNECT
Beperk Java se proxyaanmeldbesonderhede tot die proxy en kontroleer die JDK se aparte Basic-stawingsbeleid vir HTTPS CONNECT-tonnels.
Herhaalde 407 beteken nie altyd dat Java die verkeerde wagwoord gestuur het nie. Die JDK-verwysingsimplementasie deaktiveer normaalweg Basic-stawing vir HTTPS CONNECT-tonnels. ’n Proxy wat net Basic aanbied, kan verwerp word voordat jou stawingsterugroep aanmeldbesonderhede verskaf.
Beperk die aanmeldterugroep se omvang
Koppel ’n Authenticator aan die Java-HTTP-kliënt en beperk dit tot die ingestelde proxy:
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();
Dit is opstelkode vir ’n kliënt, nie ’n globale verstekstawer nie. Vervang die dokumentasieadres en gebruik aanmeldbesonderhede wat werklik vir daardie diens verskaf is. Die versoekertipe- en eindpuntkontroles keer dat dieselfde terugroep sommer die proxyrekening vir ’n webwerf se stawingsuitdaging aanbied.
Kontroleer watter stawingstadium misluk
Die JDK het aparte instellings vir gedeaktiveerde skemas by gewone HTTP-proxygebruik en CONNECT-tonneling. Die betrokke name is jdk.http.auth.proxying.disabledSchemes en jdk.http.auth.tunneling.disabledSchemes.
Dit verklaar waarom HTTP-verkeer kan staaf terwyl ’n HTTPS-tonnel deur dieselfde proxy misluk. Kontroleer die looptydomgewing se conf/net.properties en ontplooiingsbeleid eerder as om aan te neem dat ’n ander masjien dieselfde effektiewe verstekke het.
Om ’n gedeaktiveerdeskema-lys globaal leeg te maak, is nie ’n algemene proxyherstel nie. Basic-aanmeldbesonderhede wat na ’n gewone, ongeënkripteerde HTTP-proxy gestuur word, word nie deur die bestemming se latere TLS-verbinding beskerm nie. Hersien die proxyvervoer, stawingsmetode en ontplooiingsbeleid voordat ’n verandering goedgekeur word.
Die JDK se gedokumenteerde ingeboude stawingsgedrag beloof ook nie ondersteuning vir elke skema wat ’n proxy adverteer nie. ’n Handmatig verskafte Authorization- of Proxy-Authorization-kop verander die outomatiese stawingsvloei, dus moet jy pasgemaakte koppe ondersoek wanneer die terugroep anders as die voorbeeld optree.