diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-03-06 15:04:06 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-03-06 15:04:09 +0100 |
commit | 91ba414f472067feb4a4aa323da94339e2b9a116 (patch) | |
tree | 86172324ecc04f7cc0f360e1caa6594a7981b864 /vespa-athenz | |
parent | 029c213e85143e1529d511771b5c9f262537a5ad (diff) |
Only decode access token when needed
Diffstat (limited to 'vespa-athenz')
-rw-r--r-- | vespa-athenz/src/main/java/com/yahoo/vespa/athenz/api/AthenzAccessToken.java | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/api/AthenzAccessToken.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/api/AthenzAccessToken.java index 7ad97f8ac3c..16b923382b3 100644 --- a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/api/AthenzAccessToken.java +++ b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/api/AthenzAccessToken.java @@ -19,11 +19,10 @@ public class AthenzAccessToken { private static final String BEARER_TOKEN_PREFIX = "Bearer "; private final String value; - private final DecodedJWT jwt; + private volatile DecodedJWT jwt; public AthenzAccessToken(String value) { this.value = stripBearerTokenPrefix(value); - this.jwt = JWT.decode(this.value); } private static String stripBearerTokenPrefix(String rawValue) { @@ -40,7 +39,16 @@ public class AthenzAccessToken { public String value() { return value; } public String valueWithBearerPrefix() { return BEARER_TOKEN_PREFIX + value; } public Instant getExpiryTime () { - return jwt.getExpiresAt().toInstant(); + return jwt().getExpiresAt().toInstant(); + } + + private DecodedJWT jwt() { + if (jwt == null) { + // Decoding a token is expensive and involves construction of at least one Jackson ObjectMapper instance + // TODO Cache encoder/decoder as static field in AthenzAccessToken + jwt = JWT.decode(this.value); + } + return jwt; } @Override public String toString() { return "AthenzAccessToken{value='" + value + "'}"; } |