Skip to content

Commit b6a07ef

Browse files
committed
improve environment variable implementation
1 parent 421f1f9 commit b6a07ef

9 files changed

+122
-123
lines changed

aliyun-java-sdk-core/src/main/java/com/aliyuncs/auth/DefaultCredentialsProvider.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.aliyuncs.auth;
22

33
import com.aliyuncs.exceptions.ClientException;
4-
import com.aliyuncs.utils.AuthUtils;
4+
import com.aliyuncs.utils.EnvHelper;
55

66
import java.util.ArrayList;
77
import java.util.List;
@@ -16,7 +16,7 @@ public DefaultCredentialsProvider() throws ClientException {
1616
defaultProviders.add(new SystemPropertiesCredentialsProvider());
1717
defaultProviders.add(new EnvironmentVariableCredentialsProvider());
1818
defaultProviders.add(new ProfileCredentialsProvider());
19-
String roleName = AuthUtils.getEnvironmentECSMetaData();
19+
String roleName = EnvHelper.getenv("ALIBABA_CLOUD_ECS_METADATA");
2020
if (roleName != null) {
2121
if (roleName.length() == 0) {
2222
throw new ClientException("Environment variable roleName('ALIBABA_CLOUD_ECS_METADATA') cannot be empty");

aliyun-java-sdk-core/src/main/java/com/aliyuncs/auth/EnvironmentVariableCredentialsProvider.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.aliyuncs.exceptions.ClientException;
44
import com.aliyuncs.utils.AuthUtils;
5+
import com.aliyuncs.utils.EnvHelper;
56

67
public class EnvironmentVariableCredentialsProvider implements AlibabaCloudCredentialsProvider {
78
@Override
@@ -10,8 +11,9 @@ public AlibabaCloudCredentials getCredentials() throws ClientException {
1011
return null;
1112
}
1213

13-
String accessKeyId = AuthUtils.getEnvironmentAccessKeyId();
14-
String accessKeySecret = AuthUtils.getEnvironmentAccessKeySecret();
14+
String accessKeyId = EnvHelper.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
15+
String accessKeySecret = EnvHelper.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
16+
1517
if (accessKeyId == null || accessKeySecret == null) {
1618
return null;
1719
}

aliyun-java-sdk-core/src/main/java/com/aliyuncs/auth/ProfileCredentialsProvider.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.aliyuncs.exceptions.ClientException;
44
import com.aliyuncs.utils.AuthUtils;
5+
import com.aliyuncs.utils.EnvHelper;
56
import com.aliyuncs.utils.StringUtils;
67
import org.ini4j.Profile;
78
import org.ini4j.Wini;
@@ -27,13 +28,15 @@ private static Wini getIni(String filePath) throws IOException {
2728

2829
@Override
2930
public AlibabaCloudCredentials getCredentials() throws ClientException {
30-
String filePath = AuthUtils.getEnvironmentCredentialsFile();
31+
String filePath = EnvHelper.getenv("ALIBABA_CLOUD_CREDENTIALS_FILE");
3132
if (filePath == null) {
3233
filePath = AuthConstant.DEFAULT_CREDENTIALS_FILE_PATH;
3334
}
35+
3436
if (filePath.length() == 0) {
3537
throw new ClientException("The specified credentials file is empty");
3638
}
39+
3740
Wini ini;
3841
try {
3942
ini = getIni(filePath);

aliyun-java-sdk-core/src/main/java/com/aliyuncs/utils/AuthUtils.java

+24-72
Original file line numberDiff line numberDiff line change
@@ -4,43 +4,43 @@
44
import java.io.FileInputStream;
55
import java.io.IOException;
66

7-
87
public class AuthUtils {
9-
private static volatile String clientType = System.getenv("ALIBABA_CLOUD_PROFILE");
10-
private static volatile String environmentAccessKeyId;
11-
private static volatile String environmentAccesskeySecret;
12-
private static volatile String environmentECSMetaData;
13-
private static volatile String environmentCredentialsFile;
8+
private static volatile String clientType = EnvHelper.getenv("ALIBABA_CLOUD_PROFILE");
149
private static volatile String privateKey;
1510

1611
public static String getPrivateKey(String filePath) {
1712
if (null == privateKey) {
1813
synchronized (AuthUtils.class) {
1914
if (null == privateKey) {
20-
FileInputStream in = null;
21-
byte[] buffer;
22-
try {
23-
in = new FileInputStream(new File(filePath));
24-
buffer = new byte[in.available()];
25-
in.read(buffer);
26-
privateKey = new String(buffer, "UTF-8");
27-
} catch (IOException e) {
28-
e.printStackTrace();
29-
} finally {
30-
if (in != null) {
31-
try {
32-
in.close();
33-
} catch (IOException e) {
34-
e.printStackTrace();
35-
}
36-
}
37-
}
15+
privateKey = readFileContent(filePath);
3816
}
3917
}
4018
}
4119
return privateKey;
4220
}
4321

22+
public static String readFileContent(String filePath) {
23+
FileInputStream in = null;
24+
byte[] buffer;
25+
try {
26+
in = new FileInputStream(new File(filePath));
27+
buffer = new byte[in.available()];
28+
in.read(buffer);
29+
return new String(buffer, "UTF-8");
30+
} catch (IOException e) {
31+
e.printStackTrace();
32+
return null;
33+
} finally {
34+
if (in != null) {
35+
try {
36+
in.close();
37+
} catch (IOException e) {
38+
e.printStackTrace();
39+
}
40+
}
41+
}
42+
}
43+
4444
public static void setPrivateKey(String key) {
4545
privateKey = key;
4646
}
@@ -57,52 +57,4 @@ public static String getClientType() {
5757
public static void setClientType(String clientType) {
5858
AuthUtils.clientType = clientType;
5959
}
60-
61-
public static String getEnvironmentAccessKeyId() {
62-
if (null == AuthUtils.environmentAccessKeyId) {
63-
return System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
64-
} else {
65-
return AuthUtils.environmentAccessKeyId;
66-
}
67-
}
68-
69-
public static void setEnvironmentAccessKeyId(String environmentAccessKeyId) {
70-
AuthUtils.environmentAccessKeyId = environmentAccessKeyId;
71-
}
72-
73-
public static String getEnvironmentAccessKeySecret() {
74-
if (null == AuthUtils.environmentAccesskeySecret) {
75-
return System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
76-
} else {
77-
return AuthUtils.environmentAccesskeySecret;
78-
}
79-
}
80-
81-
public static void setEnvironmentAccessKeySecret(String environmentAccesskeySecret) {
82-
AuthUtils.environmentAccesskeySecret = environmentAccesskeySecret;
83-
}
84-
85-
public static String getEnvironmentECSMetaData() {
86-
if (null == AuthUtils.environmentECSMetaData) {
87-
return System.getenv("ALIBABA_CLOUD_ECS_METADATA");
88-
} else {
89-
return AuthUtils.environmentECSMetaData;
90-
}
91-
}
92-
93-
public static void setEnvironmentECSMetaData(String environmentECSMetaData) {
94-
AuthUtils.environmentECSMetaData = environmentECSMetaData;
95-
}
96-
97-
public static String getEnvironmentCredentialsFile() {
98-
if (null == AuthUtils.environmentCredentialsFile) {
99-
return System.getenv("ALIBABA_CLOUD_CREDENTIALS_FILE");
100-
} else {
101-
return AuthUtils.environmentCredentialsFile;
102-
}
103-
}
104-
105-
public static void setEnvironmentCredentialsFile(String environmentCredentialsFile) {
106-
AuthUtils.environmentCredentialsFile = environmentCredentialsFile;
107-
}
10860
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.aliyuncs.utils;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
public class EnvHelper {
7+
// 中间存储
8+
private static Map<String, String> shadowMap = new HashMap<String, String>();
9+
10+
public static String getenv(String key) {
11+
if (shadowMap.containsKey(key)) {
12+
return shadowMap.get(key);
13+
}
14+
15+
return System.getenv(key);
16+
}
17+
18+
public static void setenv(String key, String value) {
19+
shadowMap.put(key, value);
20+
}
21+
}

aliyun-java-sdk-core/src/test/java/com/aliyuncs/auth/DefaultCredentialsProviderTest.java

+15-13
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.aliyuncs.exceptions.ClientException;
44
import com.aliyuncs.utils.AuthUtils;
5+
import com.aliyuncs.utils.EnvHelper;
6+
57
import org.junit.Assert;
68
import org.junit.Test;
79

@@ -23,7 +25,7 @@ public void userConfigurationProvidersTest() {
2325
@Test
2426
public void getCredentialsTest() throws ClientException {
2527
DefaultCredentialsProvider provider = new DefaultCredentialsProvider();
26-
AuthUtils.setEnvironmentECSMetaData("");
28+
EnvHelper.setenv("ALIBABA_CLOUD_ECS_METADATA", "");
2729
try {
2830
new DefaultCredentialsProvider();
2931
Assert.fail();
@@ -32,8 +34,8 @@ public void getCredentialsTest() throws ClientException {
3234
e.getMessage());
3335
}
3436

35-
AuthUtils.setEnvironmentAccessKeyId("test");
36-
AuthUtils.setEnvironmentAccessKeySecret("test");
37+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_ID", "test");
38+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "test");
3739
AlibabaCloudCredentials credential = provider.getCredentials();
3840
Assert.assertTrue(credential instanceof BasicCredentials);
3941

@@ -53,11 +55,11 @@ public AlibabaCloudCredentials getCredentials() {
5355
Assert.assertTrue(credential instanceof BasicCredentials);
5456

5557
DefaultCredentialsProvider.clearCredentialsProvider();
56-
AuthUtils.setEnvironmentECSMetaData(null);
57-
AuthUtils.setEnvironmentAccessKeyId(null);
58-
AuthUtils.setEnvironmentAccessKeySecret(null);
58+
EnvHelper.setenv("ALIBABA_CLOUD_ECS_METADATA", null);
59+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_ID", null);
60+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET", null);
5961
System.setProperty(AuthConstant.SYSTEM_ACCESSKEYID, "");
60-
AuthUtils.setEnvironmentCredentialsFile(null);
62+
EnvHelper.setenv("ALIBABA_CLOUD_CREDENTIALS_FILE", null);
6163
try {
6264
provider.getCredentials();
6365
} catch (ClientException e) {
@@ -68,15 +70,15 @@ public AlibabaCloudCredentials getCredentials() {
6870
@Test
6971
public void defaultCredentialsProviderTest() throws ClientException {
7072
DefaultCredentialsProvider.clearCredentialsProvider();
71-
AuthUtils.setEnvironmentECSMetaData("test");
72-
AuthUtils.setEnvironmentAccessKeyId("test");
73-
AuthUtils.setEnvironmentAccessKeySecret("test");
73+
EnvHelper.setenv("ALIBABA_CLOUD_ECS_METADATA", "test");
74+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_ID", "test");
75+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "test");
7476
DefaultCredentialsProvider provider = new DefaultCredentialsProvider();
7577
DefaultCredentialsProvider.addCredentialsProvider(new SystemPropertiesCredentialsProvider());
7678
Assert.assertTrue(provider.getCredentials() instanceof BasicCredentials);
77-
AuthUtils.setEnvironmentECSMetaData(null);
78-
AuthUtils.setEnvironmentAccessKeyId(null);
79-
AuthUtils.setEnvironmentAccessKeySecret(null);
79+
EnvHelper.setenv("ALIBABA_CLOUD_ECS_METADATA", null);
80+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_ID", null);
81+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET", null);
8082
DefaultCredentialsProvider.clearCredentialsProvider();
8183
}
8284

aliyun-java-sdk-core/src/test/java/com/aliyuncs/auth/EnvironmentVariableCredentialsProviderTest.java

+11-9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import com.aliyuncs.exceptions.ClientException;
44
import com.aliyuncs.utils.AuthUtils;
5+
import com.aliyuncs.utils.EnvHelper;
6+
import com.aliyuncs.utils.EnvironmentUtils;
7+
58
import org.junit.Assert;
69
import org.junit.Test;
710

@@ -15,36 +18,35 @@ public void getCredentialsTest() throws ClientException {
1518
Assert.assertNull(provider.getCredentials());
1619

1720
AuthUtils.setClientType("default");
18-
AuthUtils.setEnvironmentAccessKeyId("accessKeyIdTest");
21+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_ID", "accessKeyIdTest");
1922
Assert.assertNull(provider.getCredentials());
2023

21-
AuthUtils.setEnvironmentAccessKeySecret("accessKeyIdTest");
24+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "accessKeyIdTest");
2225
AlibabaCloudCredentials credential = provider.getCredentials();
2326
String accessKeyId = credential.getAccessKeyId();
2427
String accessKeySecret = credential.getAccessKeySecret();
2528
Assert.assertEquals("accessKeyIdTest", accessKeyId);
2629
Assert.assertEquals("accessKeyIdTest", accessKeySecret);
2730

28-
AuthUtils.setEnvironmentAccessKeyId(null);
31+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_ID", null);
2932
Assert.assertNull(provider.getCredentials());
30-
31-
AuthUtils.setEnvironmentAccessKeyId("");
33+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_ID", "");
3234
try {
3335
provider.getCredentials();
3436
Assert.fail();
3537
} catch (ClientException e){
3638
Assert.assertEquals("Environment variable accessKeyId cannot be empty", e.getMessage());
3739
}
38-
AuthUtils.setEnvironmentAccessKeyId("a");
39-
AuthUtils.setEnvironmentAccessKeySecret("");
40+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_ID", "a");
41+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "");
4042
try {
4143
provider.getCredentials();
4244
Assert.fail();
4345
} catch (ClientException e){
4446
Assert.assertEquals("Environment variable accessKeySecret cannot be empty", e.getMessage());
4547
}
4648

47-
AuthUtils.setEnvironmentAccessKeyId(null);
48-
AuthUtils.setEnvironmentAccessKeySecret(null);
49+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_ID", null);
50+
EnvHelper.setenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET", null);
4951
}
5052
}

0 commit comments

Comments
 (0)