diff --git a/build.gradle b/build.gradle index f8d5531588..a73b2d8abd 100644 --- a/build.gradle +++ b/build.gradle @@ -1852,6 +1852,10 @@ project(':s3shell-kafka-sdk') { checkstyle { configProperties = checkstyleConfigProperties("import-control-automq.xml") } + + dependencies { + compileOnly libs.awsSdkAuth + } } project(':tools') { diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 1790ce9d36..9f4c99ed64 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -133,7 +133,8 @@ versions += [ s3stream: "0.17.0-SNAPSHOT", opentelemetry: "1.32.0", opentelemetryAlpha: "1.32.0-alpha", - oshi: "6.4.7" + oshi: "6.4.7", + awsSdkAuth:"2.20.127", ] libs += [ activation: "javax.activation:activation:$versions.activation", @@ -231,6 +232,7 @@ libs += [ commonMath3: "org.apache.commons:commons-math3:$versions.commonMath3", nettyHttp2: "io.netty:netty-codec-http2:$versions.netty", s3stream: "com.automq.elasticstream:s3stream:$versions.s3stream", + awsSdkAuth: "software.amazon.awssdk:auth:$versions.awsSdkAuth", opentelemetryJava8: "io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry-java8:$versions.opentelemetryAlpha", opentelemetryOshi: "io.opentelemetry.instrumentation:opentelemetry-oshi:$versions.opentelemetryAlpha", opentelemetrySdk: "io.opentelemetry:opentelemetry-sdk:$versions.opentelemetry", diff --git a/s3shell-kafka-sdk/src/main/java/com/automq/s3shell/sdk/auth/CredentialsProviderHolder.java b/s3shell-kafka-sdk/src/main/java/com/automq/s3shell/sdk/auth/CredentialsProviderHolder.java new file mode 100644 index 0000000000..3c20c49a1f --- /dev/null +++ b/s3shell-kafka-sdk/src/main/java/com/automq/s3shell/sdk/auth/CredentialsProviderHolder.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.automq.s3shell.sdk.auth; + +import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; + +public class CredentialsProviderHolder { + + //global singleton credential provider + private static volatile AwsCredentialsProvider awsCredentialsProvider; + + private CredentialsProviderHolder() { + } + + public static AwsCredentialsProvider getAwsCredentialsProvider() { + if (awsCredentialsProvider == null) { + throw new IllegalStateException("AwsCredentialsProvider has not been initialized"); + } + return awsCredentialsProvider; + } + + public static synchronized void create(AwsCredentialsProvider newAwsCredentialsProvider) { + if (awsCredentialsProvider != null) { + throw new IllegalStateException("AwsCredentialsProvider is already initialized"); + } + awsCredentialsProvider = newAwsCredentialsProvider; + } +}