אַ חזרנדיקער 407 מיינט נישט תּמיד אַז Java האָט געשיקט דאָס אומריכטיקע פּאַראָל. די רעפֿערענץ־אימפּלעמענטאַציע פֿונעם JDK שאַלט געוויינטלעך אויס Basic־אויטענטיפֿיקאַציע פֿאַר HTTPS CONNECT־טונעלן. אַ פּראָקסי וואָס אָפפערט בלויז Basic קען אָפּגעוואָרפֿן ווערן איידער אײַער אויטענטיפֿיקאַציע־callback גיט איבער צוטריט־דאַטן.

באַגרענעצט דעם פֿאַרנעם פֿונעם callback פֿאַר צוטריט־דאַטן

פֿאַרבינדט אַן Authenticator מיטן Java HTTP־קליענט און באַגרענעצט אים צום קאָנפֿיגורירטן פּראָקסי:

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 פֿירט זיך אַנדערש ווי אינעם בײַשפּיל.

פֿאַרבונדענע אַרטיקלען