• 解决Feign HTTPS远程调用绕过SSL证书验证


    系统增加ssl证书后,通过Feign访问的接口会报错。

    import feign.Client;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
    import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;
    import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.net.ssl.*;
    import java.security.KeyManagementException;
    import java.security.NoSuchAlgorithmException;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    
    @Configuration
    public class FeignConfig {
    
        @Bean
        @ConditionalOnMissingBean
        public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,
                                  SpringClientFactory clientFactory) throws NoSuchAlgorithmException, KeyManagementException {
            SSLContext ctx = SSLContext.getInstance("SSL");
            X509TrustManager tm = new X509TrustManager() {
                @Override
                public void checkClientTrusted(X509Certificate[] chain,
                                               String authType) throws CertificateException {
                }
    
                @Override
                public void checkServerTrusted(X509Certificate[] chain,
                                               String authType) throws CertificateException {
                }
    
                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };
            ctx.init(null, new TrustManager[]{tm}, null);
            return new LoadBalancerFeignClient(new Client.Default(ctx.getSocketFactory(),
                    new HostnameVerifier() {
    
                        @Override
                        public boolean verify(String hostname, SSLSession session) {
                            // TODO Auto-generated method stub
                            return true;
                        }
                    }),
                    cachingFactory, clientFactory);
        }
    }
    

      

    <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                </dependency>
                <!-- 使用Apache HttpClient替换Feign原生httpclient -->
                <dependency>
                    <!--不是netfix包下了,应该是独立出来开源了-->
                    <groupId>io.github.openfeign</groupId>
                    <artifactId>feign-httpclient</artifactId>
                    <version>9.4.0</version>
                    <!-- <version>9.5.1</version>   这里可以不指定version spring-boot-parent中已经有版本定义-->
                </dependency>
                
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
  • 相关阅读:
    ubuntu 下redis的安装简介
    Oracle 的几种循环方式介绍
    NIO 概述 与 通信实例
    io 的一些简单说明及使用
    webSocket的 原理 及 实现
    事务 与事务的 隔离级别 简单说明
    case 函数的简单使用记录下
    java HttpClient 忽略证书的信任的实现 MySSLProtocolSocketFactory
    南京小吃八绝
    JavaScript图表库(百度)
  • 原文地址:https://www.cnblogs.com/emojio/p/13565114.html
Copyright © 2020-2023  润新知