Ralat proksi Java 407: semak pengesahan Basic untuk CONNECT
Hadkan kelayakan Java kepada proksi berkenaan dan semak dasar pengesahan Basic JDK yang berasingan untuk terowong HTTPS CONNECT.
407 yang berulang tidak semestinya bermakna Java menghantar kata laluan yang salah. Pelaksanaan rujukan JDK biasanya menyahdayakan pengesahan Basic untuk penerowongan HTTPS CONNECT. Proksi yang hanya menawarkan Basic boleh ditolak sebelum panggil balik pengesahan anda membekalkan kelayakan.
Hadkan skop panggil balik kelayakan
Pasangkan Authenticator pada klien HTTP Java dan hadkannya kepada proksi yang dikonfigurasi:
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();
Ini ialah kod persediaan untuk satu klien, bukan pengesah lalai global. Gantikan alamat dokumentasi dan gunakan kelayakan yang benar-benar dibekalkan untuk perkhidmatan itu. Semakan jenis peminta dan titik akhir menghalang panggil balik yang sama daripada sewenang-wenangnya menawarkan akaun proksi kepada cabaran pengesahan laman web.
Semak peringkat pengesahan yang gagal
JDK mempunyai tetapan skim yang dinyahdayakan secara berasingan untuk proksi HTTP biasa dan penerowongan CONNECT. Nama yang berkaitan ialah jdk.http.auth.proxying.disabledSchemes dan jdk.http.auth.tunneling.disabledSchemes.
Ini menjelaskan sebab trafik HTTP boleh disahkan sedangkan terowong HTTPS melalui proksi yang sama gagal. Semak conf/net.properties masa jalan dan dasar penempatan, jangan anggap mesin lain mempunyai nilai lalai berkuat kuasa yang sama.
Mengosongkan senarai skim yang dinyahdayakan secara global bukan penyelesaian umum untuk proksi. Kelayakan Basic yang dihantar kepada proksi HTTP teks biasa tidak dilindungi oleh sambungan TLS ke destinasi yang dibuat kemudian. Semak pengangkutan proksi, kaedah pengesahan dan dasar penempatan sebelum meluluskan perubahan.
Tingkah laku pengesahan terbina dalam JDK yang didokumenkan juga bukan janji untuk menyokong setiap skim yang diiklankan oleh proksi. Pengepala Authorization atau Proxy-Authorization yang dibekalkan secara manual mengubah aliran pengesah automatik, jadi periksa pengepala tersuai apabila tingkah laku panggil balik berbeza daripada contoh.