美文网首页
FeignClient 问题和使用集锦

FeignClient 问题和使用集锦

作者: 蓝笔头 | 来源:发表于2021-08-31 19:44 被阅读0次

(1)问题:@FeignClient 出现 https 证书错误

现象:

  : [ImageClient#uploadImages] javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
...
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
...
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
...

解决方案: 配置 feign.Client 忽略 https 证书校验

import feign.Client;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;

@Configuration
public class FeginClientConfig {

    @Bean
    public Client getClient() throws NoSuchAlgorithmException, KeyManagementException {
        SSLContext sslContext = SSLContext.getInstance("tls");

        final TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager() {
                @Override
                public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                }

                @Override
                public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                }

                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new java.security.cert.X509Certificate[]{};
                }
            }
        };

        sslContext.init(null, trustAllCerts, new SecureRandom());

        return new Client.Default(sslContext.getSocketFactory(), null);
    }
}

(2)使用:设置 cookie

@Configuration
public class FeginClientConfig {
    @Bean
    public RequestInterceptor headerInterceptor() {
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate requestTemplate) {
                    // 配置 Cookie
                    requestTemplate.header("Cookie", "xxx");
            }
        };
    }
}

(3)使用:打印请求日志

  • 3.1)注入 feign.Logger.Level 级别为 Logger.Level.FULL 的 Bean 对象。
@Configuration
public class FeginClientConfig {
    @Bean
    public Logger.Level level() {
        return Logger.Level.FULL;
    }
}
  • 3.2)在 application.properties 文件中新增如下配置:
# 将 Feign 接口的日志级别设置成 DEBUG,因为 Feign 的 logger.Level 只对 DEBUG 做出响应
# com.example.demo.client.ImageClient 为 Feign 接口的完整类名
logging.level.com.example.demo.client.ImageClient=DEBUG

调用接口,控制台输出如下所示:

2021-09-01 09:53:06.964 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] ---> POST https://xxx/admin/image/upload HTTP/1.1
2021-09-01 09:53:06.964 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] Content-Length: 3490
2021-09-01 09:53:06.964 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] Content-Type: multipart/form-data; charset=UTF-8; boundary=17b9f0f5390
2021-09-01 09:53:06.964 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] Cookie: mod_auth_openidc_session=xxx
2021-09-01 09:53:06.964 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] 
2021-09-01 09:53:06.964 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] Binary data
2021-09-01 09:53:06.964 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] ---> END HTTP (3490-byte body)
2021-09-01 09:53:07.191 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] <--- HTTP/1.1 200 200 (222ms)
2021-09-01 09:53:07.191 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] cache-control: private, no-cache
2021-09-01 09:53:07.191 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] connection: Keep-Alive
2021-09-01 09:53:07.191 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] content-length: 107
2021-09-01 09:53:07.191 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] content-type: application/json;charset=UTF-8
2021-09-01 09:53:07.191 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] date: Wed, 01 Sep 2021 01:53:07 GMT
2021-09-01 09:53:07.191 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] domainversion: b2206b7f9a221ce762517e3b1e6d9503a6484866da8f8a65e7bed9ebd2a81483
2021-09-01 09:53:07.191 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] expires: 0
2021-09-01 09:53:07.191 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] keep-alive: timeout=5
2021-09-01 09:53:07.191 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] lb-metric: D=43324 t=1630461187848528
2021-09-01 09:53:07.191 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] pragma: no-cache
2021-09-01 09:53:07.192 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] server: Apache
2021-09-01 09:53:07.192 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] set-cookie: mod_auth_openidc_session=xxx; Path=/; Secure; HttpOnly; SameSite=Strict
2021-09-01 09:53:07.192 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] tc-metric: RenderJSP:0.020ms
2021-09-01 09:53:07.192 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] tc-metric: Total:27.934ms
2021-09-01 09:53:07.192 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] vary: Origin,Accept-Encoding,Access-Control-Request-Method,Access-Control-Request-Headers
2021-09-01 09:53:07.192 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] x-protected-by: OpenRASP
2021-09-01 09:53:07.192 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] x-request-id: bb6204f2d4b2481495b71a79d9ce407a
2021-09-01 09:53:07.192 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] x-wumii-traceid: [Ignored Trace]
2021-09-01 09:53:07.192 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] 
2021-09-01 09:53:07.193 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] {"error":{"code":0},"data":{"name":"35801523.png","url":"https://xxx.com/images/f/R/e/A4UGJ2.png"}}
2021-09-01 09:53:07.193 DEBUG 25964 --- [nio-8080-exec-2] com.example.demo.client.ImageClient      : [ImageClient#uploadImages] <--- END HTTP (107-byte body)
2021-09-01 09:53:07.262  INFO 25964 --- [nio-8080-exec-2] c.e.demo.controller.ImageController      : upload webResult: WebResult [error=Error [code=0, message=null], data={name=35801523.png, url=https://xxx/images/f/R/e/A4UGJ2.png}]

参考

相关文章

网友评论

      本文标题:FeignClient 问题和使用集锦

      本文链接:https://www.haomeiwen.com/subject/qvzziltx.html