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,15 @@ 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+ 				.putProperty ( AwsV4HttpSigner .SERVICE_SIGNING_NAME , service  )
74+ 				.putProperty ( AwsV4HttpSigner .REGION_NAME , region .id () ) );
7875
7976		// The AWS SDK added some headers. 
8077		// Let's just override the existing headers with whatever the AWS SDK came up with. 
8178		// We don't expect signing to affect anything else (path, query, content, ...). 
82- 		for  ( Map .Entry <String , List <String >> header  : awsRequest .headers ().entrySet () ) {
79+ 		for  ( Map .Entry <String , List <String >> header  : signedRequest . request () .headers ().entrySet () ) {
8380			String  name  = header .getKey ();
8481			boolean  first  = true ;
8582			for  ( String  value  : header .getValue () ) {
@@ -94,7 +91,7 @@ private void sign(HttpRequest request, HttpContext context, HttpEntityContentStr
9491		}
9592
9693		if  ( log .isTraceEnabled () ) {
97- 			log .tracef ( "AWS request (after signing): %s" , awsRequest  );
94+ 			log .tracef ( "AWS request (after signing): %s" , signedRequest  );
9895			log .tracef ( "HTTP request (after signing): %s" , request  );
9996		}
10097	}
0 commit comments