Skip to content

Commit fe87938

Browse files
committed
fix: resolve credentials provider in profile
1 parent db0e9a2 commit fe87938

File tree

6 files changed

+61
-10
lines changed

6 files changed

+61
-10
lines changed

aliyun-java-sdk-core/src/main/java/com/aliyuncs/DefaultAcsClient.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,16 @@ public DefaultAcsClient(String regionId) throws ClientException {
7272
}
7373

7474
public DefaultAcsClient(IClientProfile profile) {
75-
this(profile, new StaticCredentialsProvider(profile));
75+
this.clientProfile = profile;
76+
AlibabaCloudCredentialsProvider provider = profile.getCredentialsProvider();
77+
if (provider != null) {
78+
this.credentialsProvider = provider;
79+
} else {
80+
this.credentialsProvider = new StaticCredentialsProvider(profile);
81+
}
82+
this.httpClient = HttpClientFactory.buildClient(profile);
83+
this.endpointResolver = new DefaultEndpointResolver(this, profile);
84+
this.appendUserAgent("HTTPClient", this.httpClient.getClass().getSimpleName());
7685
}
7786

7887
public DefaultAcsClient(IClientProfile profile, AlibabaCloudCredentials credentials) {
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.aliyuncs.auth;
22

33
@Deprecated
4+
/**
5+
* @Deprecated : Use AlibabaCloudCredentialsProvider instead of this
6+
*/
47
public interface ICredentialProvider {
58

6-
Credential fresh();
9+
Credential fresh();
710

811
}

aliyun-java-sdk-core/src/main/java/com/aliyuncs/profile/DefaultProfile.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class DefaultProfile implements IClientProfile {
1515
private String regionId = null;
1616
private FormatType acceptFormat = null;
1717
private ICredentialProvider icredential = null;
18+
private volatile AlibabaCloudCredentialsProvider credentialsProvider = null;
1819
private Credential credential;
1920
private String certPath;
2021
private HttpClientConfig httpClientConfig = HttpClientConfig.getDefault();
@@ -50,6 +51,10 @@ public synchronized static DefaultProfile getProfile() {
5051
return profile;
5152
}
5253

54+
/**
55+
* @deprecated : Use DefaultAcsClient(IClientProfile profile, AlibabaCloudCredentialsProvider credentialsProvider) instead of this
56+
*/
57+
@Deprecated
5358
public synchronized static DefaultProfile getProfile(String regionId, ICredentialProvider icredential) {
5459
profile = new DefaultProfile(regionId, icredential);
5560
return profile;
@@ -72,15 +77,15 @@ public synchronized static DefaultProfile getProfile(String regionId) {
7277
}
7378

7479
/**
75-
* @Deprecated : Use addEndpoint(String regionId, String product, String endpoint) instead of this
80+
* @deprecated : Use addEndpoint(String regionId, String product, String endpoint) instead of this
7681
*/
7782
@Deprecated
7883
public synchronized static void addEndpoint(String endpointName, String regionId, String product, String domain) {
7984
addEndpoint(endpointName, regionId, product, domain, true);
8085
}
8186

8287
/**
83-
* @Deprecated : Use addEndpoint(String regionId, String product, String endpoint) instead of this
88+
* @deprecated : Use addEndpoint(String regionId, String product, String endpoint) instead of this
8489
*/
8590
@Deprecated
8691
public synchronized static void addEndpoint(String endpointName, String regionId, String product, String domain,
@@ -104,6 +109,11 @@ public synchronized FormatType getFormat() {
104109
return acceptFormat;
105110
}
106111

112+
@Override
113+
public AlibabaCloudCredentialsProvider getCredentialsProvider() {
114+
return credentialsProvider;
115+
}
116+
107117
@Override
108118
public synchronized Credential getCredential() {
109119
if (null == credential && null != icredential) {
@@ -118,12 +128,17 @@ public ISigner getSigner() {
118128
return null;
119129
}
120130

131+
132+
/**
133+
* @deprecated : Use DefaultAcsClient(IClientProfile profile, AlibabaCloudCredentialsProvider credentialsProvider) instead of this
134+
*/
121135
@Override
136+
@Deprecated
122137
public void setCredentialsProvider(AlibabaCloudCredentialsProvider credentialsProvider) {
123-
if (credential != null) {
124-
return;
138+
if (credential == null) {
139+
credential = new CredentialsBackupCompatibilityAdaptor(credentialsProvider);
125140
}
126-
credential = new CredentialsBackupCompatibilityAdaptor(credentialsProvider);
141+
this.credentialsProvider = credentialsProvider;
127142
}
128143

129144
@Override

aliyun-java-sdk-core/src/main/java/com/aliyuncs/profile/IClientProfile.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
public interface IClientProfile {
1111

1212
/**
13-
* @Deprecated : Use Signer.getSigner(AlibabaCloudCredentials credentials) instead of this
13+
* @deprecated : Use Signer.getSigner(AlibabaCloudCredentials credentials) instead of this
1414
*/
1515
@Deprecated
1616
ISigner getSigner();
@@ -19,17 +19,20 @@ public interface IClientProfile {
1919

2020
FormatType getFormat();
2121

22+
AlibabaCloudCredentialsProvider getCredentialsProvider();
23+
2224
/**
23-
* @Deprecated : Use AlibabaCloudCredentialsProvider getCredentials() instead of this
25+
* @deprecated : Use AlibabaCloudCredentialsProvider getCredentials() instead of this
2426
*/
2527
@Deprecated
2628
Credential getCredential();
2729

2830
/**
2931
* This method exists because ClientProfile holds too much modules like endpoint management
3032
*
31-
* @param credentialsProvider
33+
* @deprecated : Use DefaultAcsClient(IClientProfile profile, AlibabaCloudCredentialsProvider credentialsProvider) instead of this
3234
*/
35+
@Deprecated
3336
void setCredentialsProvider(AlibabaCloudCredentialsProvider credentialsProvider);
3437

3538
/**

aliyun-java-sdk-core/src/test/java/com/aliyuncs/DefaultAcsClientTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,17 @@ public void testConstructorWithProfileAndCredentials() {
8989
Assert.assertTrue(profile == client.getProfile());
9090
}
9191

92+
@Test
93+
public void testConstructorWithProfileAndCredentialsProvider() throws NoSuchFieldException, IllegalAccessException {
94+
DefaultProfile profile = mock(DefaultProfile.class);
95+
STSAssumeRoleSessionCredentialsProvider provider = mock(STSAssumeRoleSessionCredentialsProvider.class);
96+
when(profile.getCredentialsProvider()).thenReturn(provider);
97+
DefaultAcsClient client = new DefaultAcsClient(profile);
98+
Field field = client.getClass().getDeclaredField("credentialsProvider");
99+
field.setAccessible(true);
100+
Assert.assertTrue(field.get(client) instanceof STSAssumeRoleSessionCredentialsProvider);
101+
}
102+
92103
@SuppressWarnings("deprecation")
93104
@Test
94105
public void testGetSetHttpClient() {

aliyun-java-sdk-core/src/test/java/com/aliyuncs/profile/DefaultProfileTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,16 @@ public void testGetCredential() {
4343
assertTrue(profile.getCredential() == credential);
4444
}
4545

46+
@Test
47+
public void testGetCredentialsProvider() {
48+
DefaultProfile profile = DefaultProfile.getProfile("regionId");
49+
assertNull(profile.getCredentialsProvider());
50+
StaticCredentialsProvider credentialsProvider = mock(StaticCredentialsProvider.class);
51+
profile.setCredentialsProvider(credentialsProvider);
52+
assertTrue(profile.getCredentialsProvider() instanceof StaticCredentialsProvider);
53+
assertTrue(profile.getCredential() instanceof Credential);
54+
}
55+
4656
@Test
4757
public void getRegionId() {
4858
DefaultProfile profile = DefaultProfile.getProfile("regionId");

0 commit comments

Comments
 (0)