diff --git a/tokens/src/main/java/io/scalecube/security/tokens/jwt/JwksKeyLocator.java b/tokens/src/main/java/io/scalecube/security/tokens/jwt/JwksKeyLocator.java index 852e554..d0c41ca 100644 --- a/tokens/src/main/java/io/scalecube/security/tokens/jwt/JwksKeyLocator.java +++ b/tokens/src/main/java/io/scalecube/security/tokens/jwt/JwksKeyLocator.java @@ -37,6 +37,7 @@ public class JwksKeyLocator extends LocatorAdapter { private final Duration connectTimeout; private final Duration requestTimeout; private final int keyTtl; + private final HttpClient httpClient; private final Map keyResolutions = new ConcurrentHashMap<>(); private final ReentrantLock cleanupLock = new ReentrantLock(); @@ -46,6 +47,7 @@ private JwksKeyLocator(Builder builder) { this.connectTimeout = Objects.requireNonNull(builder.connectTimeout, "connectTimeout"); this.requestTimeout = Objects.requireNonNull(builder.requestTimeout, "requestTimeout"); this.keyTtl = builder.keyTtl; + this.httpClient = HttpClient.newBuilder().connectTimeout(connectTimeout).build(); } public static Builder builder() { @@ -75,12 +77,9 @@ private JwkInfoList computeKeyList() { final HttpResponse httpResponse; try { httpResponse = - HttpClient.newBuilder() - .connectTimeout(connectTimeout) - .build() - .send( - HttpRequest.newBuilder(jwksUri).GET().timeout(requestTimeout).build(), - BodyHandlers.ofInputStream()); + httpClient.send( + HttpRequest.newBuilder(jwksUri).GET().timeout(requestTimeout).build(), + BodyHandlers.ofInputStream()); } catch (HttpTimeoutException e) { throw new JwtUnavailableException("Failed to retrive jwk keys", e); } catch (IOException e) {