Java ProxySelector: trūkstošo HTTP un HTTPS portu normalizēšana
Normalizējiet izlaistos HTTP portus pirms galamērķu salīdzināšanas pielāgotā ProxySelector un turiet HTTP noteikumus ārpus neapstrādātu ligzdu izvēles.
Noteikums sūta http://reports.example:80/ caur starpniekserveri, bet ļauj http://reports.example/ iet tieši. Šie URL apraksta to pašu parasto HTTP galapunktu. Neatbilstība parasti rodas no analizēto portu burtiskas salīdzināšanas.
URI.getPort() atgriež -1, ja URI nav porta. Tas neaizstāj shēmas noklusējuma vērtību. Maršrutēšanas politika, kas salīdzina vērtību ar 80, palaidīs garām otro URL.
String scheme = uri.getScheme();
int port = uri.getPort();
if (port == -1) {
if ("http".equalsIgnoreCase(scheme)) port = 80;
else if ("https".equalsIgnoreCase(scheme)) port = 443;
}
Piemērojiet to pašu normalizēšanu abām salīdzinājuma pusēm. Izlabojot tikai pieprasījuma URI, konfigurētais galamērķis ar izlaistu portu joprojām paliek nesaskaņots. Salīdziniet resursdatoru, faktisko portu un paredzēto shēmu; noraidiet nepareizus vai bez resursdatora galamērķus caur definētu kļūdas ceļu.
Nepārvērtiet katru atzvanīšanu par HTTP lēmumu
Noklusējuma atlasītājam var jautāt arī par neapstrādātu ligzdu savienojumiem, izmantojot socket shēmu. Tikai resursdatora un porta sakritība nedrīkst likt šai atzvanīšanai atgriezt HTTP starpniekserveri, kas paredzēts URL pieprasījumiem. Nododiet neatbalstītās shēmas iepriekšējam atlasītājam, saglabājot tā atbilstošo uzvedību.
Tveriet šo iepriekšējo atlasītāju pirms sava instalēšanas. Pašreizējās noklusējuma vērtības meklēšana aizvietotāja iekšienē var vienkārši atkal izsaukt aizvietotāju.
Diagnozējot neatbilstību, reģistrējiet shēmu, resursdatoru, sākotnējo portu un faktisko portu. Neļaujieties vienam novērotam skaitlim vai atzvanīšanu secībai starp JDK ieviešanām. Politiķim ir jāpieņem pareizs lēmums katram sniegtajam URI.