[JAVA] So richten Sie einen Proxy mit Authentifizierung in Feign ein

Proxy-Unterstützung vortäuschen (mit Authentifizierung)

Ich denke, dass einige Unternehmen beim Herstellen einer Verbindung zum Internet einen "Proxy" durchlaufen müssen, für den eine Authentifizierung erforderlich ist. Ich möchte erklären, wie man "Proxy" setzt, wenn man eine im Internet veröffentlichte API mit dem API-Client "Feign" in einer solchen Umgebung aufruft.

Feign delegiert den Prozess der Ausgabe einer HTTP-Anfrage an eine andere Bibliothek. Mit anderen Worten, es reicht aus, den "Proxy" der zu verwendenden Bibliothek zu unterstützen.

Ändern Sie dieses Mal "Feign" (Beispiel, um Mitwirkende des angegebenen GitHub-Repositorys zu erhalten, das auf der GitHub-Seite erläutert wird) (https://github.com/OpenFeign/feign#basics), um "Proxy" zu unterstützen. schauen.

Die Erklärung von "Feign" finden Sie unter "Feign, das den API-Client nur mit Schnittstelle implementiert, ist sehr praktisch!".

GitHubDemo.java


package com.example.feign.demo.github;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.List;
import java.util.concurrent.TimeUnit;

import feign.Feign;
import feign.jackson.JacksonDecoder;
import okhttp3.Authenticator;
import okhttp3.Credentials;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.Route;

/**
 * modify Feign example(https://github.com/OpenFeign/feign) to corresponded proxy
 */
public class GitHubDemo {

    public static void main(String[] args) {

        // create instance of okhttp3.OkHttpClient corresponded proxy 
        OkHttpClient client = createOkHttpClientCorrespondedProxy("127.0.0.1",
                8080, "userId", "pass");

        // feign use proxy with authentication
        GitHub github = Feign.builder()
                // set instance of feign.Client.OkHttpClient
                .client(new feign.okhttp.OkHttpClient(client))
                // use Jackson
                .decoder(new JacksonDecoder())
                .target(GitHub.class, "https://api.github.com");

        // call api [GET /repos/{owner}/{repo}/contributors]
        List<Contributor> contributors = github.contributors("OpenFeign",
                "feign");
        for (Contributor contributor : contributors) {
            System.out.println(
                    contributor.login + " (" + contributor.contributions + ")");
        }
    }

    /**
     * create instance of okhttp3.OkHttpClient corresponded proxy
     * @param proxyHost proxy's host url or ipAddress
     * @param proxyPort proxy's port number
     * @param userId userId of proxy's authentication
     * @param pass pass of proxy's authentication
     * @return instance of okhttp3.OkHttpClient
     */
    private static OkHttpClient createOkHttpClientCorrespondedProxy(
            String proxyHost, int proxyPort, String userId, String pass) {

        // okhttp3.Authenticator : correct
        // java.net.Authenticator : incorrect
        Authenticator proxyAuthenticator = new Authenticator() {
            @Override
            public Request authenticate(Route route,
                    Response response) throws IOException {
                String credential = Credentials.basic(userId, pass);
                return response.request().newBuilder()
                        .header("Proxy-Authorization", credential).build();
            }
        };

        // okhttp3.OkHttpClient : correct
        // feign.Client.OkHttpClient : incorrect
        return new OkHttpClient.Builder().connectTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .proxy(new Proxy(Proxy.Type.HTTP,
                        new InetSocketAddress(proxyHost, proxyPort)))
                .proxyAuthenticator(proxyAuthenticator).build();
    }
}

Die zu beachtenden Punkte sind unten aufgeführt.

(Referenz) https://stackoverflow.com/questions/35554380/okhttpclient-proxy-authentication-how-to

Recommended Posts

So richten Sie einen Proxy mit Authentifizierung in Feign ein
[So fügen Sie ein Video mit Rails in haml ein]
[Rails 6] So legen Sie ein Hintergrundbild in Rails [CSS] fest
So setzen Sie Lombok in Eclipse
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
So erstellen Sie eine JAR-Datei ohne Abhängigkeiten in Maven
So benennen Sie ein Modell mit externen Schlüsseleinschränkungen in Rails um
[Hinweis] So starten Sie den mit Docker-Compose eingerichteten Windows-Container neu
So fügen Sie ein Video in Rails ein
So richten Sie kapt ein und verwenden es
So erreichen Sie den Dateidownload mit Feign
So setzen Sie JAVA_HOME mit dem Appassembler-Maven-Plugin von Maven
So erreichen Sie das Hochladen von Dateien mit Feign
[Persönliches Memo] Interaktion mit dem Zufallszahlengenerator in Java
Minimale Schritte zum Einrichten einer Ruby-Umgebung mit rbenv unter Ubuntu 20.04
So übergeben Sie einen Proxy, wenn Sie REST mit SSL in Java auslösen
SSH in Ubuntu von einem Terminal mit öffentlicher Schlüsselauthentifizierung
So starten Sie einen Docker-Container mit einem in einer Batchdatei bereitgestellten Volume
Richten Sie eine Java-GUI in einem separaten Thread ein, um die Haupt-GUI beizubehalten
So zeigen Sie eine Webseite in Java an
So führen Sie eine djUnit-Aufgabe in Ant aus
So fügen Sie in Spring Boot einen Klassenpfad hinzu
So erstellen Sie ein Thema in Liferay 7 / DXP
So richten Sie jEnv (Mac) ein und bedienen es
So implementieren Sie eine ähnliche Funktion in Rails
So erstellen Sie einfach ein Pulldown mit Rails
So richten Sie JavaED Full Edition (Plejaden) ein
So schreiben Sie Testcode mit Basic-Zertifizierung
Richten Sie einen Webhook in der benutzerdefinierten App von Shopify ein
Richten Sie mit Vagrant einen virtuellen Cent OS-Server ein
So generieren Sie automatisch einen Konstruktor in Eclipse
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
Einführung von # 10 devise_token_auth zum Erstellen einer Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6
Einführung des Experten Nr. 15 zum Erstellen einer Bulletin-Board-API mit Zertifizierung und Autorisierung in Rails 6
So speichern Sie gleichzeitig Daten in einem Modell, das einem verschachtelten Formular zugeordnet ist (Rails 6.0.0)
So richten Sie Computer Vision für die Verfolgung von Bildern und Videos mit TrackingJs ein
Einbetten von JavaScript-Variablen in HTML mit Thymeleaf
So implementieren Sie UICollectionView mit Code nur in Swift
So löschen Sie alle Daten in einer bestimmten Tabelle
Aufrufen von Funktionen in großen Mengen mit Java Reflection
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
So stellen Sie die Anzeigezeit in Rails auf japanische Zeit ein
So implementieren Sie eine nette Funktion in Ajax mit Rails
So wechseln Sie Tomcat context.xml mit Eclipse WTP
So löschen Sie ein mit Rails erstelltes new_record-Objekt
[Android / Java] Richten Sie eine Schaltfläche ein, um zu Fragment zurückzukehren
Verwendung der Z3-Bibliothek in Scala mit Eclipse
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
So generieren Sie manuell ein JWT mit Knock in Rails
So erstellen Sie einen Daten-URI (base64) in Java
So zeigen Sie eine Browser-Vorschau mit VS-Code an
So löschen Sie mit Docker Bilder ohne Tags in großen Mengen
So schreiben Sie eine Datumsvergleichssuche in Rails
So verspotten Sie einen Super-Methodenaufruf in PowerMock
Verwendung der JDD-Bibliothek in Scala mit Eclipse
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So konvertieren Sie eine Datei in ein Byte-Array in Java