Spring-cloud-feign添加統一的Header

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章