Вхід до проксі належить постачальнику облікових даних транспорту. Для Spring 6 з Apache HttpClient 5 обмежте цей обліковий запис посередником:

var proxy = new org.apache.hc.core5.http.HttpHost(
    "http", "proxy.example", 8080);
var credentials = new org.apache.hc.client5.http.impl.auth
    .BasicCredentialsProvider();
credentials.setCredentials(
    new org.apache.hc.client5.http.auth.AuthScope(proxy),
    new org.apache.hc.client5.http.auth.UsernamePasswordCredentials(
        proxyUser, proxyPassword.toCharArray()));

var http = org.apache.hc.client5.http.impl.classic.HttpClients.custom()
    .setProxy(proxy)
    .setDefaultCredentialsProvider(credentials)
    .build();
var factory = new org.springframework.http.client
    .HttpComponentsClientHttpRequestFactory(http);
var rest = new org.springframework.web.client.RestTemplate(factory);

Програма надає значення proxyUser і proxyPassword та володіє життєвим циклом HTTP-клієнта. Використовуйте rest повторно для робочого навантаження, а не створюйте ще один шаблон за замовчуванням у місці виклику.

AuthScope обмежує, де ці облікові дані дійсні. Приклад надає звичайні облікові дані з іменем користувача та паролем; назва BasicCredentialsProvider не змушує кожен виклик використовувати схему HTTP Basic.

З HTTPS-призначенням транспорт може відповісти на запит проксі під час CONNECT, перш ніж існуватиме зашифрований HTTP-запит програми. Загальний перехоплювач призначення, що додає Proxy-Authorization, не еквівалентний цим переговорам.

Налаштовуйте будь-який обліковий запис призначення окремо. Якщо проксі все ще відхиляє запит, збережіть оголошену ним схему автентифікації та фактичні хост і порт. Облікові дані, обмежені іншою кінцевою точкою, не збігатимуться лише тому, що пароль правильний.

Схожі статті