From 96a395b5dc0c35c81cf000f7463be87c2b188358 Mon Sep 17 00:00:00 2001 From: Sayantan Chakravorty Date: Mon, 23 Aug 2021 12:38:30 -0700 Subject: [PATCH] Additional logging for logging the classes and classloaders of the IAMClientCallbackHandler and the AWSCredentialsCallback classes. (#38) * Enable support for STS regional endpoints when configured to assume a role In AWS VPCs without internet access which have the STS VPC endpoint created the region needs to be explicitly along with the environment variable AWS_STS_REGIONAL_ENDPOINTS=regional otherwise the AWS Java SDK will use the global STS endpoint. * Additional logging for logging the classes and classloaders of the IAMClientCallbackHandler and the AWSCredentialsCallback classes. Co-authored-by: Dan Vulpe --- .../amazon/msk/auth/iam/IAMClientCallbackHandler.java | 11 ++++++++++- .../msk/auth/iam/IAMClientCallbackHandlerTest.java | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/software/amazon/msk/auth/iam/IAMClientCallbackHandler.java b/src/main/java/software/amazon/msk/auth/iam/IAMClientCallbackHandler.java index 6602778..96fc3da 100644 --- a/src/main/java/software/amazon/msk/auth/iam/IAMClientCallbackHandler.java +++ b/src/main/java/software/amazon/msk/auth/iam/IAMClientCallbackHandler.java @@ -69,10 +69,15 @@ public void close() { @Override public void handle(@NonNull Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback callback : callbacks) { + if (log.isDebugEnabled()) { + log.debug("Type information for callback: " + debugClassString(callback.getClass()) + " from " + + debugClassString(this.getClass())); + } if (callback instanceof AWSCredentialsCallback) { handleCallback((AWSCredentialsCallback) callback); } else { - String message = "Unsupported callback type:" + callback.getClass().getName(); + String message = "Unsupported callback type: " + debugClassString(callback.getClass()) + " from " + + debugClassString(this.getClass()); //We are breaking good practice and logging as well as throwing since this is where client side //integrations might have trouble. Depending on the client framework either logging or throwing might //surface the error more easily to the user. @@ -82,6 +87,10 @@ public void handle(@NonNull Callback[] callbacks) throws IOException, Unsupporte } } + protected static String debugClassString(Class clazz) { + return "class: " + clazz.getName() + " classloader: " + clazz.getClassLoader().toString(); + } + protected void handleCallback(AWSCredentialsCallback callback) throws IOException { if (log.isDebugEnabled()) { log.debug("Selecting provider {} to load credentials", provider.getClass().getName()); diff --git a/src/test/java/software/amazon/msk/auth/iam/IAMClientCallbackHandlerTest.java b/src/test/java/software/amazon/msk/auth/iam/IAMClientCallbackHandlerTest.java index 89d2a41..b544e8d 100644 --- a/src/test/java/software/amazon/msk/auth/iam/IAMClientCallbackHandlerTest.java +++ b/src/test/java/software/amazon/msk/auth/iam/IAMClientCallbackHandlerTest.java @@ -66,5 +66,13 @@ public void testDifferentCallback() { assertTrue(callbackException.getMessage().startsWith("Unsupported")); } + @Test + public void testDebugClassString() { + String debug1 = IAMClientCallbackHandler.debugClassString(this.getClass()); + assertTrue(debug1.contains("software.amazon.msk.auth.iam.IAMClientCallbackHandlerTest")); + IAMClientCallbackHandler clientCallbackHandler = new IAMClientCallbackHandler(); + String debug2 = IAMClientCallbackHandler.debugClassString(clientCallbackHandler.getClass()); + assertTrue(debug2.contains("software.amazon.msk.auth.iam.IAMClientCallbackHandler")); + } }