ຂໍ້ຜິດພາດພຣັອກຊີ Java 407: ກວດ Basic ສຳລັບ CONNECT
ຈຳກັດຂໍ້ມູນເຂົ້າລະບົບ Java ໃຫ້ໃຊ້ກັບພຣັອກຊີທີ່ກຳນົດ ແລະກວດນະໂຍບາຍ Basic ແຍກຕ່າງຫາກຂອງ JDK ສຳລັບອຸໂມງ HTTPS CONNECT.
407 ທີ່ເກີດຊ້ຳບໍ່ໄດ້ໝາຍຄວາມສະເໝີວ່າ Java ສົ່ງລະຫັດຜ່ານຜິດ. ການຕິດຕັ້ງອ້າງອີງຂອງ JDK ປົກກະຕິຈະປິດການຢືນຢັນຕົວຕົນ Basic ສຳລັບອຸໂມງ HTTPS CONNECT. ພຣັອກຊີທີ່ສະເໜີ Basic ເທົ່ານັ້ນອາດຖືກປະຕິເສດກ່ອນ callback ຢືນຢັນຕົວຕົນຂອງທ່ານຈະໃຫ້ຂໍ້ມູນເຂົ້າລະບົບ.
ຈຳກັດຂອບເຂດຂອງ callback ຂໍ້ມູນເຂົ້າລະບົບ
ເຊື່ອມ Authenticator ເຂົ້າກັບ ໄຄລເອັນ HTTP ຂອງ Java ແລະຈຳກັດໃຫ້ໃຊ້ສະເພາະພຣັອກຊີທີ່ຕັ້ງຄ່າໄວ້:
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 ຂອງສະພາບແວດລ້ອມລັນ ແລະນະໂຍບາຍນຳໃຊ້ ແທນການສົມມຸດວ່າເຄື່ອງອື່ນມີຄ່າເລີ່ມຕົ້ນທີ່ໃຊ້ຈິງຄືກັນ.
ການລ້າງລາຍຊື່ຮູບແບບທີ່ປິດໃຫ້ວ່າງທົ່ວລະບົບບໍ່ແມ່ນວິທີແກ້ພຣັອກຊີທົ່ວໄປ. ຂໍ້ມູນ Basic ທີ່ສົ່ງໃຫ້ພຣັອກຊີ HTTP ແບບບໍ່ເຂົ້າລະຫັດ ບໍ່ໄດ້ຮັບການປົກປ້ອງໂດຍການເຊື່ອມຕໍ່ TLS ກັບປາຍທາງທີ່ສ້າງພາຍຫຼັງ. ທົບທວນ ການຂົນສົ່ງຂອງພຣັອກຊີ, ວິທີຢືນຢັນຕົວຕົນ ແລະນະໂຍບາຍນຳໃຊ້ກ່ອນອະນຸມັດການປ່ຽນແປງ.
ພຶດຕິກຳຢືນຢັນຕົວຕົນພາຍໃນ JDK ທີ່ລະບຸໃນເອກະສານກໍບໍ່ແມ່ນຄຳສັນຍາວ່າຈະຮອງຮັບທຸກຮູບແບບທີ່ພຣັອກຊີປະກາດ. ຫົວຂໍ້ Authorization ຫຼື Proxy-Authorization ທີ່ໃຫ້ດ້ວຍມືຈະປ່ຽນຂັ້ນຕອນຂອງຕົວຢືນຢັນອັດຕະໂນມັດ, ດັ່ງນັ້ນໃຫ້ກວດຫົວຂໍ້ທີ່ກຳນົດເອງເມື່ອ callback ເຮັດວຽກຕ່າງຈາກຕົວຢ່າງ.