回答

10

我想我找到了! :)

該項目似乎完全符合我的要求:aws-signing-request-interceptor,描述爲「用於簽署AWS請求的Apache客戶端請求攔截器,最初創建用於使用Jest客戶端支持AWS Elasticsearch Service。

編輯:我forked the project適合我的需要(Java 7,臨時STS憑據),它很好地工作。

這裏使用的(這裏沒有STS臨時憑證)的例子:

String region = "us-east-1"; 
String service = "es"; 
String url = "???"; // put the AWS ElasticSearch endpoint here 

DefaultAWSCredentialsProviderChain awsCredentialsProvider = new DefaultAWSCredentialsProviderChain(); 
final AWSSigner awsSigner = new AWSSigner(awsCredentialsProvider, region, service,() -> new LocalDateTime(DateTimeZone.UTC)); 

JestClientFactory factory = new JestClientFactory() { 
    @Override 
    protected HttpClientBuilder configureHttpClient(HttpClientBuilder builder) { 
     builder.addInterceptorLast(new AWSSigningRequestInterceptor(awsSigner)); 
     return builder; 
    } 
}; 
factory.setHttpClientConfig(new HttpClientConfig.Builder(url) 
     .multiThreaded(true) 
     .build()); 
JestClient client = factory.getObject(); 
+0

是的,這也爲我工作:) – panipsilos

+0

Eric,你好我下面你所提供的鏈接GitHub的。我們正面臨禁止的錯誤。另一個問題是在正常的客戶端我們通過彈性搜索端點。但在這裏,我們只傳遞服務名稱和區域。你能否提供示例代碼或指導來解決我們的問題。 –

+0

Hi @MohanShanmugam。禁止的錯誤可能是由於訪問策略配置錯誤或憑據錯誤所致。我在答案中添加了一個使用示例。希望這可以幫助。 –

1

這並不在異步請求的情況下工作。

更新:

忽略我以前的評論。它增加了對異步請求攔截過之後的工作原理:

final AWSSigningRequestInterceptor requestInterceptor = new AWSSigningRequestInterceptor(awsSigner); 
      factory = new JestClientFactory() { 
       @Override 
       protected HttpClientBuilder configureHttpClient(HttpClientBuilder builder) { 
        builder.addInterceptorLast(requestInterceptor); 
        return builder; 
       } 
       @Override 
       protected HttpAsyncClientBuilder configureHttpClient(HttpAsyncClientBuilder builder) { 
        builder.addInterceptorLast(requestInterceptor); 
        return builder; 
       } 
      }; 
相關問題