[JAVA] Comment configurer un proxy avec authentification dans Feign

Prise en charge de Feign Proxy (avec authentification)

Je pense que certaines entreprises doivent passer par «proxy», qui nécessite une authentification, lors de la connexion à Internet. Je voudrais expliquer comment définir proxy lors de l'appel d'une API publiée sur Internet à l'aide de Feign, qui est un client API dans un tel environnement.

Feign délègue le processus d'émission d'une requête HTTP à une autre bibliothèque. En d'autres termes, il vous suffit de prendre en charge le «proxy» de la bibliothèque à utiliser.

Cette fois, changez l 'Sample de Feign pour obtenir les contributeurs du référentiel spécifié de GitHub expliqué sur la page GitHub pour prendre en charge proxy. regarder.

Pour l'explication de Feign, veuillez vous référer à" Feign qui implémente le client API uniquement avec l'interface est très pratique! ".

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();
    }
}

Les points à noter sont indiqués ci-dessous.

(référence) https://stackoverflow.com/questions/35554380/okhttpclient-proxy-authentication-how-to

Recommended Posts

Comment configurer un proxy avec authentification dans Feign
[Comment insérer une vidéo dans un hameau avec Rails]
[Rails 6] Comment définir une image d'arrière-plan dans Rails [CSS]
Comment définir Lombok dans Eclipse
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
Comment créer un fichier jar sans dépendances dans Maven
Comment renommer un modèle avec des contraintes de clé externes dans Rails
[Note] Comment redémarrer le conteneur Windows configuré avec docker-compose
Comment insérer une vidéo dans Rails
Comment configurer et utiliser kapt
Comment réaliser le téléchargement de fichiers avec Feign
Comment définir JAVA_HOME avec l'appassembler-maven-plugin de Maven
Comment réaliser le téléchargement de fichiers avec Feign
[Mémo personnel] Comment interagir avec le générateur de nombres aléatoires en Java
Étapes minimales pour configurer un environnement Ruby avec rbenv sur Ubuntu 20.04
Comment passer un proxy lors du lancement de REST avec SSL en Java
Comment SSH dans Ubuntu à partir d'un terminal avec authentification par clé publique
Comment démarrer un conteneur Docker avec un volume monté dans un fichier de commandes
Configurez une interface graphique Java dans un thread séparé pour conserver le
Comment afficher une page Web en Java
Comment exécuter une tâche djUnit dans Ant
Comment ajouter un chemin de classe dans Spring Boot
Comment créer un thème dans Liferay 7 / DXP
Comment configurer et utiliser jEnv (Mac)
Comment implémenter une fonctionnalité similaire dans Rails
Comment créer facilement un pull-down avec des rails
Comment configurer JavaED Full Edition (pléiades)
Comment écrire du code de test avec la certification de base
Configurer un webhook dans l'application personnalisée de Shopify
Configurer un serveur virtuel Cent OS avec Vagrant
Comment générer automatiquement un constructeur dans Eclipse
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Introduction de # 10 devise_token_auth pour créer une API de tableau d'affichage avec autorisation d'authentification dans Rails 6
Introduction de l'expert n ° 15 pour créer une API de tableau d'affichage avec certification et autorisation dans Rails 6
Comment stocker simultanément des données dans un modèle associé à une forme imbriquée (Rails 6.0.0)
Comment configurer la vision par ordinateur pour le suivi des images et des vidéos avec TrackingJs
Comment intégrer des variables JavaScript dans HTML avec Thymeleaf
Comment implémenter UICollectionView avec du code uniquement dans Swift
Comment effacer toutes les données d'une table particulière
Comment appeler des fonctions en bloc avec la réflexion Java
Comment créer un environnement Java en seulement 3 secondes
Comment régler l'heure d'affichage sur l'heure japonaise dans les rails
Comment implémenter une fonctionnalité intéressante dans Ajax avec Rails
Comment basculer Tomcat context.xml avec Eclipse WTP
Comment supprimer un objet new_record construit avec Rails
[Android / Java] Configurer un bouton pour revenir à Fragment
Comment utiliser la bibliothèque Z3 dans Scala avec Eclipse
Comment créer un projet Spring Boot dans IntelliJ
Comment générer manuellement un JWT avec Knock in Rails
Comment créer un URI de données (base64) en Java
Comment afficher un aperçu du navigateur avec VS Code
Comment supprimer des images non balisées en masse avec Docker
Comment écrire une recherche de comparaison de dates dans Rails
Comment se moquer d'un appel de super méthode dans PowerMock
Comment utiliser la bibliothèque JDD dans Scala avec Eclipse
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment convertir un fichier en tableau d'octets en Java