FeignClient 问题和使用集锦
2021-08-31 本文已影响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}]