Overview
業務需求
請求某些機密服務,需要做加密操作,所以需要添加統一的簽名 Header
。
Code
@Slf4j
@Component
public class testFeignInterceptor implements RequestInterceptor {
public void apply(RequestTemplate requestTemplate) {
String url = requestTemplate.url();
// 只對特定url進行簽名添加Header的操作
if (!url.startsWith("/test/api")) {
return;
}
String accessKeyId = "ak";
String privateKey = "MI";
String body = "";
if (requestTemplate.body() != null) {
body = new String(requestTemplate.body());
}
String contentSHA256 = getContentSHA256(body);
String date = new Date().toString();
String nonce = UUID.randomUUID().toString().replace("-", "");
String signature = getSignature(privateKey, requestTemplate.url(), requestTemplate.method(), contentSHA256, date, nonce);
requestTemplate.header("Accept", "application/json");
requestTemplate.header("Content-SHA256", contentSHA256);
requestTemplate.header("Content-Type", "application/json");
requestTemplate.header("Date", date);
requestTemplate.header("x-signature-nonce", nonce);
requestTemplate.header("Authorization", accessKeyId + ":" + signature);
}
}
其他
過程中,需要打印請求和響應的詳細信息
添加 FeignConfiguration
:
@Configuration
public class FeignConfiguration {
public static int connectTimeOutMillis = 30000;
public static int readTimeOutMillis = 30000;
@Bean
public Request.Options options() {
return new Request.Options(connectTimeOutMillis, readTimeOutMillis);
}
@Bean
Logger.Level feignLoggerLevel() {
//這裏記錄所有,根據實際情況選擇合適的日誌level
return Logger.Level.FULL;
}
}
添加配置:
logging:
level:
com:
test:
client: debug