Skip to content

Commit ad759ed

Browse files
committed
feat(profile): resolve credentials per request
1 parent 7d11a18 commit ad759ed

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

‎src/main/java/io/github/easy4j/hermes/HermesHttpClientConfig.java‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package io.github.easy4j.hermes;
22
import io.github.easy4j.hermes.api.HermesApiConstants;
3+
import io.github.easy4j.hermes.security.CredentialProvider;
4+
import io.github.easy4j.hermes.security.CredentialSnapshot;
35
import io.github.easy4j.hermes.security.EndpointPolicy;
6+
import io.github.easy4j.hermes.security.ProfileIdentity;
47
import lombok.Data;
58

69
import java.util.Objects;
@@ -73,6 +76,12 @@ public HermesHttpClientConfig(HermesDebugConfig debug) {
7376
*/
7477
private String apiKey;
7578

79+
/** 命名 Profile 的每请求凭据提供器;设置后优先于静态 apiKey。 */
80+
private CredentialProvider credentialProvider;
81+
82+
/** 当前命名 Profile 的非秘密身份。 */
83+
private ProfileIdentity profileIdentity;
84+
7685
/**
7786
* 建立连接的超时时间,单位为毫秒。
7887
*/
@@ -236,6 +245,17 @@ public void markUnsafeBaseUrlOverriddenForTest(boolean value) {
236245
}
237246

238247
public String resolveApiKey() {
248+
if (credentialProvider != null) {
249+
if (profileIdentity == null) {
250+
throw new IllegalStateException("Profile identity is required for dynamic credentials");
251+
}
252+
CredentialSnapshot snapshot = credentialProvider.resolve(profileIdentity);
253+
if (snapshot == null) {
254+
throw new IllegalStateException("No credential is available for Hermes profile "
255+
+ profileIdentity.getProfileId());
256+
}
257+
return Objects.toString(snapshot.getToken(), "");
258+
}
239259
return Objects.toString(apiKey, "");
240260
}
241261
}

0 commit comments

Comments
 (0)