Skip to content

Commit

Permalink
US2023090800967 adapter SDK 支持ak/sk的轮转
Browse files Browse the repository at this point in the history
  • Loading branch information
z30050892 committed Sep 8, 2023
1 parent e7aede3 commit 4ee280e
Show file tree
Hide file tree
Showing 7 changed files with 116 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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";
Expand Down Expand Up @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.huaweicloud.dis.core.builder;

public interface AkSkHolder {
public String getAk();

public String getSk();

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ public abstract class ClientBuilder<Subclass extends ClientBuilder, TypeToBuild>
{

protected Credentials credentials;

protected AkSkHolder akSkHolder;

protected String ak;

Expand Down Expand Up @@ -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.
Expand All @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
}
Expand Down

0 comments on commit 4ee280e

Please sign in to comment.