in refarch/aws-native/streaming/stream-processing/src/main/java/com/amazonaws/ara/http/AWSRequestSigningApacheInterceptor.java [54:110]
public void process(HttpRequest httpRequest, HttpContext httpContext) throws HttpException, IOException {
URIBuilder uriBuilder;
try {
uriBuilder = new URIBuilder(httpRequest.getRequestLine().getUri());
} catch (URISyntaxException e) {
throw new IOException("Invalid URI", e);
}
// 1. Create a SignableRequest from the HttpRequest so that we can sign it
DefaultRequest<Object> signableRequest = new DefaultRequest<>(service);
HttpHost host = (HttpHost) httpContext.getAttribute(HTTP_TARGET_HOST);
if (host != null) {
signableRequest.setEndpoint(URI.create(host.toURI()));
}
final HttpMethodName httpMethod = HttpMethodName.fromValue(httpRequest.getRequestLine().getMethod());
signableRequest.setHttpMethod(httpMethod);
try {
signableRequest.setResourcePath(uriBuilder.build().getRawPath());
} catch (URISyntaxException e) {
throw new IOException("Invalid URI", e);
}
if (httpRequest instanceof HttpEntityEnclosingRequest) {
final HttpEntityEnclosingRequest httpEntityEnclosingRequest = (HttpEntityEnclosingRequest) httpRequest;
if (httpEntityEnclosingRequest.getEntity() != null) {
signableRequest.setContent(httpEntityEnclosingRequest.getEntity().getContent());
}
}
signableRequest.setParameters(nvpToMapParams(uriBuilder.getQueryParams()));
signableRequest.setHeaders(headerArrayToMap(httpRequest.getAllHeaders()));
// 2. Sign the SignableRequest
final AWSCredentialsProvider credentialsProvider = new DefaultAWSCredentialsProviderChain();
final AWS4Signer signer = new AWS4Signer();
signer.setRegionName(region);
signer.setServiceName(service);
signer.sign(signableRequest, credentialsProvider.getCredentials());
// 3. Copy everything back to the HttpRequest
httpRequest.setHeaders(mapToHeaderArray(signableRequest.getHeaders()));
if (httpRequest instanceof HttpEntityEnclosingRequest) {
final HttpEntityEnclosingRequest httpEntityEnclosingRequest = (HttpEntityEnclosingRequest) httpRequest;
if (httpEntityEnclosingRequest.getEntity() != null) {
final BasicHttpEntity basicHttpEntity = new BasicHttpEntity();
basicHttpEntity.setContent(signableRequest.getContent());
httpEntityEnclosingRequest.setEntity(basicHttpEntity);
}
}
}