From 4ee280ea0b07d0acb4a81be348314e5b7b2c9794 Mon Sep 17 00:00:00 2001 From: z30050892 Date: Fri, 8 Sep 2023 16:57:41 +0800 Subject: [PATCH] =?UTF-8?q?US2023090800967=20adapter=20SDK=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81ak/sk=E7=9A=84=E8=BD=AE=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/huaweicloud/dis/DISConfig.java | 22 ++++++++++++++ .../huaweicloud/dis/core/DISCredentials.java | 18 ++++++++++++ .../builder/AbstractDISClientBuilder.java | 8 +++-- .../dis/core/builder/AkSkHolder.java | 8 +++++ .../dis/core/builder/ClientBuilder.java | 14 +++++++++ .../huaweicloud/dis/core/util/AkSkUtils.java | 29 +++++++++++++++++++ .../dis/http/AbstractDISClient.java | 19 ++++++++++++ 7 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/AkSkHolder.java create mode 100644 huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/util/AkSkUtils.java diff --git a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/DISConfig.java b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/DISConfig.java index 45b6d97..8a7606f 100644 --- a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/DISConfig.java +++ b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/DISConfig.java @@ -19,6 +19,8 @@ import com.huaweicloud.dis.core.ClientParams; import com.huaweicloud.dis.core.auth.credentials.BasicCredentials; import com.huaweicloud.dis.core.auth.credentials.Credentials; +import com.huaweicloud.dis.core.builder.AkSkHolder; +import com.huaweicloud.dis.core.util.AkSkUtils; import com.huaweicloud.dis.core.util.StringUtils; import com.huaweicloud.dis.http.Protocol; import com.huaweicloud.dis.util.compress.CompressionType; @@ -63,6 +65,7 @@ public class DISConfig extends Properties implements ClientParams { public static final String PROPERTY_REGION_ID = "region"; public static final String PROPERTY_ENDPOINT = "endpoint"; + public static final String AKSK_CLASSPATH="aksk_classpath"; public static final String PROPERTY_MANAGER_ENDPOINT = "manager.endpoint"; public static final String PROPERTY_PROJECT_ID = "projectId"; public static final String GROUP_ID = "group.id"; @@ -210,10 +213,29 @@ public BodySerializeType getBodySerializeType() { public String getAK() { + AkSkUtils akSkUtils = AkSkUtils.getInstance(); + AkSkHolder akSkHolder = null; + if(akSkUtils != null){ + akSkHolder = akSkUtils.getAkSkHolder(); + } + if(akSkHolder != null&&!StringUtils.isNullOrEmpty(akSkHolder.getAk())) { + return akSkHolder.getAk(); + } return get(PROPERTY_AK, null); } + public String getAkskClasspath() { + return get(AKSK_CLASSPATH, null); + } public String getSK() { + AkSkUtils akSkUtils = AkSkUtils.getInstance(); + AkSkHolder akSkHolder = null; + if(akSkUtils != null){ + akSkHolder = akSkUtils.getAkSkHolder(); + } + if(akSkHolder != null &&! StringUtils.isNullOrEmpty(akSkHolder.getSk())) { + return akSkHolder.getSk(); + } return get(PROPERTY_SK, null); } diff --git a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/DISCredentials.java b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/DISCredentials.java index 615eca2..70da924 100644 --- a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/DISCredentials.java +++ b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/DISCredentials.java @@ -18,6 +18,8 @@ import com.huaweicloud.dis.DISConfig; import com.huaweicloud.dis.core.auth.AuthType; +import com.huaweicloud.dis.core.builder.AkSkHolder; +import com.huaweicloud.dis.core.util.AkSkUtils; import com.huaweicloud.dis.core.util.StringUtils; import com.huaweicloud.dis.exception.DISClientException; @@ -95,10 +97,26 @@ public DISCredentials(String accessKeyId, String secretKey, String securityToken } public String getAccessKeyId() { + AkSkUtils akSkUtils = AkSkUtils.getInstance(); + AkSkHolder akSkHolder = null; + if(akSkUtils != null){ + akSkHolder = akSkUtils.getAkSkHolder(); + } + if(akSkHolder != null &&! StringUtils.isNullOrEmpty(akSkHolder.getAk())) { + return akSkHolder.getAk(); + } return accessKeyId; } public String getSecretKey() { + AkSkUtils akSkUtils = AkSkUtils.getInstance(); + AkSkHolder akSkHolder = null; + if(akSkUtils != null){ + akSkHolder = akSkUtils.getAkSkHolder(); + } + if(akSkHolder != null&&!StringUtils.isNullOrEmpty(akSkHolder.getSk())) { + return akSkHolder.getSk(); + } return secretKey; } diff --git a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/AbstractDISClientBuilder.java b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/AbstractDISClientBuilder.java index 4cdfa73..138ab35 100644 --- a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/AbstractDISClientBuilder.java +++ b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/AbstractDISClientBuilder.java @@ -4,6 +4,7 @@ import java.util.Properties; import com.huaweicloud.dis.DISConfig; +import com.huaweicloud.dis.core.util.AkSkUtils; import com.huaweicloud.dis.core.util.StringUtils; import com.huaweicloud.dis.http.Protocol; import com.huaweicloud.dis.util.compress.CompressionType; @@ -51,8 +52,11 @@ protected DISConfig configDISConfig(DISConfig disConfig){ if(disConfig == null) { disConfig = new DISConfig(); } - if (null != credentials) - { + if(akSkHolder!=null){ + AkSkUtils akSkUtils = AkSkUtils.getInstance(); + akSkUtils.setAkSkHolder(akSkHolder); + } + if (null != credentials) { disConfig.setCredentials(credentials); } if (!StringUtils.isNullOrEmpty(ak)) diff --git a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/AkSkHolder.java b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/AkSkHolder.java new file mode 100644 index 0000000..0fb6700 --- /dev/null +++ b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/AkSkHolder.java @@ -0,0 +1,8 @@ +package com.huaweicloud.dis.core.builder; + +public interface AkSkHolder { + public String getAk(); + + public String getSk(); + +} diff --git a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/ClientBuilder.java b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/ClientBuilder.java index a16ba74..ac35e85 100644 --- a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/ClientBuilder.java +++ b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/builder/ClientBuilder.java @@ -28,6 +28,8 @@ public abstract class ClientBuilder { protected Credentials credentials; + + protected AkSkHolder akSkHolder; protected String ak; @@ -82,6 +84,11 @@ public final Subclass withAuthType(String authType) { setAuthType(authType); return getSubclass(); } + + public final Subclass withAKSkHolder(AkSkHolder akSkHolder) { + setAkSkHolder(akSkHolder); + return getSubclass(); + } /* * Gets the AWSCredentialsProvider currently configured in the builder. @@ -104,6 +111,13 @@ public final void setAk(String ak) this.ak = ak; } + public void setAkSkHolder(AkSkHolder akSkHolder) { + this.akSkHolder=akSkHolder; + } + public AkSkHolder getAkSkHolder() { + return akSkHolder; + } + public void setAuthType(String authType) { this.authType = authType; } diff --git a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/util/AkSkUtils.java b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/util/AkSkUtils.java new file mode 100644 index 0000000..208c7cb --- /dev/null +++ b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/core/util/AkSkUtils.java @@ -0,0 +1,29 @@ +package com.huaweicloud.dis.core.util; + +import com.huaweicloud.dis.core.builder.AkSkHolder; + +public class AkSkUtils { + private static volatile AkSkUtils instance; + + private AkSkHolder akSkHolder; + + + public AkSkHolder getAkSkHolder() { + return akSkHolder; + } + + public void setAkSkHolder(AkSkHolder akSkHolder) { + this.akSkHolder = akSkHolder; + } + + public static AkSkUtils getInstance(){ + if(instance==null){ + synchronized (AkSkUtils.class){ + if(instance==null){ + instance=new AkSkUtils(); + } + } + } + return instance; + } +} diff --git a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/http/AbstractDISClient.java b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/http/AbstractDISClient.java index 358dfce..ba201c7 100644 --- a/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/http/AbstractDISClient.java +++ b/huaweicloud-sdk-java-dis/src/main/java/com/huaweicloud/dis/http/AbstractDISClient.java @@ -8,8 +8,10 @@ import com.huaweicloud.dis.core.Request; import com.huaweicloud.dis.core.auth.AuthType; import com.huaweicloud.dis.core.auth.signer.internal.SignerConstants; +import com.huaweicloud.dis.core.builder.AkSkHolder; import com.huaweicloud.dis.core.handler.AsyncHandler; import com.huaweicloud.dis.core.http.HttpMethodName; +import com.huaweicloud.dis.core.util.AkSkUtils; import com.huaweicloud.dis.core.util.StringUtils; import com.huaweicloud.dis.exception.*; import com.huaweicloud.dis.http.exception.HttpStatusCodeException; @@ -78,6 +80,23 @@ public class AbstractDISClient { protected ICredentialsProvider credentialsProvider; public AbstractDISClient(DISConfig disConfig) { + String akskClasspath = disConfig.getAkskClasspath(); + try { + if(!StringUtils.isNullOrEmpty(akskClasspath)) { + Class clazz = Class.forName(akskClasspath); + AkSkHolder akSkHolder = (AkSkHolder) clazz.newInstance(); + if(akSkHolder!=null) { + AkSkUtils akSkUtils = AkSkUtils.getInstance(); + akSkUtils.setAkSkHolder(akSkHolder); + } + } + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } this.disConfig = DISConfig.buildConfig(disConfig); init(); }