Java proksisidagi 407 xatolari: CONNECT uchun Basic autentifikatsiyasini tekshiring
Java kirish ma’lumotlarini tegishli proksi bilan cheklang va HTTPS CONNECT tunnellari uchun JDKning alohida Basic autentifikatsiya siyosatini tekshiring.
Takrorlangan 407 har doim Java noto‘g‘ri parol yuborganini anglatmaydi. JDKning namunaviy amalga oshirilishi odatda HTTPS CONNECT tunnellari uchun Basic autentifikatsiyasini o‘chiradi. Faqat Basic taklif qiladigan proksi autentifikatsiya callback funksiyangiz kirish ma’lumotlarini taqdim etishidan oldin rad qilinishi mumkin.
Kirish ma’lumotlari callback funksiyasining doirasini cheklang
Java HTTP mijoziga Authenticator biriktiring va uni sozlangan proksi bilan cheklang:
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();
Bu bitta mijozni sozlash kodi, global standart autentifikator emas. Hujjatlashtirish manzilini almashtiring va aynan shu xizmat uchun berilgan haqiqiy kirish ma’lumotlaridan foydalaning. So‘rovchi turi va oxirgi nuqta tekshiruvlari ayni callback veb-saytning autentifikatsiya talabiga proksi hisobini o‘ylamasdan taklif qilishining oldini oladi.
Qaysi autentifikatsiya bosqichi ishlamayotganini tekshiring
JDKda oddiy HTTP proksilash va CONNECT tunnellash uchun o‘chirilgan sxemalarning alohida sozlamalari bor. Tegishli nomlar jdk.http.auth.proxying.disabledSchemes va jdk.http.auth.tunneling.disabledSchemes.
Bu HTTP trafigi autentifikatsiyadan o‘ta olsa-da, shu proksi orqali HTTPS tunneli nega ishlamasligini tushuntiradi. Boshqa kompyuterda ham bir xil amaldagi standartlar bor deb taxmin qilish o‘rniga, bajarilish muhitining conf/net.properties faylini va joylashtirish siyosatini tekshiring.
O‘chirilgan sxemalar ro‘yxatini global bo‘shatish umumiy proksi tuzatishi emas. Shifrlanmagan HTTP proksiga yuborilgan Basic kirish ma’lumotlarini manzil bilan keyinroq tuziladigan TLS ulanishi himoya qilmaydi. O‘zgarishni tasdiqlashdan oldin proksi transportini, autentifikatsiya usulini va joylashtirish siyosatini ko‘rib chiqing.
JDKning hujjatlashtirilgan ichki autentifikatsiya xatti-harakati ham proksi e’lon qiladigan har bir sxemani qo‘llash va’dasi emas. Qo‘lda berilgan Authorization yoki Proxy-Authorization sarlavhasi avtomatik autentifikator oqimini o‘zgartiradi; callback namunadan boshqacha ishlasa, maxsus sarlavhalarni tekshiring.