2727import org .apache .http .protocol .HttpCoreContext ;
2828import software .amazon .awssdk .auth .credentials .AwsCredentials ;
2929import software .amazon .awssdk .auth .credentials .AwsCredentialsProvider ;
30- import software .amazon .awssdk .auth .signer .Aws4Signer ;
31- import software .amazon .awssdk .auth .signer .params .Aws4SignerParams ;
3230import software .amazon .awssdk .http .ContentStreamProvider ;
3331import software .amazon .awssdk .http .SdkHttpFullRequest ;
3432import software .amazon .awssdk .http .SdkHttpMethod ;
33+ import software .amazon .awssdk .http .auth .aws .signer .AwsV4HttpSigner ;
34+ import software .amazon .awssdk .http .auth .spi .signer .SignedRequest ;
3535import software .amazon .awssdk .regions .Region ;
3636
3737class AwsSigningRequestInterceptor implements HttpRequestInterceptor {
3838
3939 private static final Log log = LoggerFactory .make ( Log .class , MethodHandles .lookup () );
4040
41- private final Aws4Signer signer ;
41+ private final AwsV4HttpSigner signer ;
4242 private final Region region ;
4343 private final String service ;
4444 private final AwsCredentialsProvider credentialsProvider ;
4545
4646 AwsSigningRequestInterceptor (Region region , String service , AwsCredentialsProvider credentialsProvider ) {
47- this .signer = Aws4Signer .create ();
47+ this .signer = AwsV4HttpSigner .create ();
4848 this .region = region ;
4949 this .service = service ;
5050 this .credentialsProvider = credentialsProvider ;
@@ -68,18 +68,16 @@ private void sign(HttpRequest request, HttpContext context, HttpEntityContentStr
6868 AwsCredentials credentials = credentialsProvider .resolveCredentials ();
6969 log .tracef ( "AWS credentials: %s" , credentials );
7070
71- Aws4SignerParams signerParams = Aws4SignerParams .builder ()
72- .awsCredentials ( credentials )
73- .signingRegion ( region )
74- .signingName ( service )
75- .build ();
76-
77- awsRequest = signer .sign ( awsRequest , signerParams );
71+ SignedRequest signedRequest = signer .sign ( r -> r .identity ( credentials )
72+ .request ( awsRequest )
73+ .payload ( awsRequest .contentStreamProvider ().orElse ( null ) )
74+ .putProperty ( AwsV4HttpSigner .SERVICE_SIGNING_NAME , service )
75+ .putProperty ( AwsV4HttpSigner .REGION_NAME , region .id () ) );
7876
7977 // The AWS SDK added some headers.
8078 // Let's just override the existing headers with whatever the AWS SDK came up with.
8179 // We don't expect signing to affect anything else (path, query, content, ...).
82- for ( Map .Entry <String , List <String >> header : awsRequest .headers ().entrySet () ) {
80+ for ( Map .Entry <String , List <String >> header : signedRequest . request () .headers ().entrySet () ) {
8381 String name = header .getKey ();
8482 boolean first = true ;
8583 for ( String value : header .getValue () ) {
@@ -94,7 +92,7 @@ private void sign(HttpRequest request, HttpContext context, HttpEntityContentStr
9492 }
9593
9694 if ( log .isTraceEnabled () ) {
97- log .tracef ( "AWS request (after signing): %s" , awsRequest );
95+ log .tracef ( "AWS request (after signing): %s" , signedRequest );
9896 log .tracef ( "HTTP request (after signing): %s" , request );
9997 }
10098 }
0 commit comments