Attempting to lazily load the keys
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/e8d3b813 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/e8d3b813 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/e8d3b813 Branch: refs/heads/master Commit: e8d3b8132fe0eb242d38420d67739898cd8da151 Parents: c2e9b70 Author: Jonathan Gallimore <[email protected]> Authored: Mon Nov 26 21:46:44 2018 +0000 Committer: Roberto Cortez <[email protected]> Committed: Fri Dec 7 18:13:05 2018 +0000 ---------------------------------------------------------------------- .../config/ConfigurableJWTAuthContextInfo.java | 7 +-- .../tomee/microprofile/jwt/config/Lazy.java | 54 ++++++++++++++++++++ pom.xml | 2 +- .../jwt/src/test/resources/arquillian.xml | 2 +- 4 files changed, 60 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/e8d3b813/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/ConfigurableJWTAuthContextInfo.java ---------------------------------------------------------------------- diff --git a/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/ConfigurableJWTAuthContextInfo.java b/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/ConfigurableJWTAuthContextInfo.java index 5d41b5e..59decad 100644 --- a/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/ConfigurableJWTAuthContextInfo.java +++ b/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/ConfigurableJWTAuthContextInfo.java @@ -71,14 +71,15 @@ public class ConfigurableJWTAuthContextInfo { @Inject private Config config; - private JWTAuthContextInfo jwtAuthContextInfo; + private Supplier<JWTAuthContextInfo> jwtAuthContextInfo; public void init(@Observes @Initialized(ApplicationScoped.class) ServletContext context) { - this.jwtAuthContextInfo = createJWTAuthContextInfo(); + // load the key set once, lazily + this.jwtAuthContextInfo = new Lazy<>(() -> createJWTAuthContextInfo()); } public Optional<JWTAuthContextInfo> getJWTAuthContextInfo() { - return Optional.ofNullable(jwtAuthContextInfo); + return Optional.ofNullable(jwtAuthContextInfo.get()); } private Optional<String> getVerifierPublicKey() { http://git-wip-us.apache.org/repos/asf/tomee/blob/e8d3b813/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/Lazy.java ---------------------------------------------------------------------- diff --git a/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/Lazy.java b/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/Lazy.java new file mode 100644 index 0000000..2267fe8 --- /dev/null +++ b/mp-jwt/src/main/java/org/apache/tomee/microprofile/jwt/config/Lazy.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tomee.microprofile.jwt.config; + +import org.apache.bval.util.Validate; + +import java.util.function.Supplier; + +public class Lazy<T> implements Supplier<T> { + private T value; + private volatile Supplier<T> init; + + public Lazy(Supplier<T> init) { + reset(init); + } + + public Lazy<T> reset(Supplier<T> init) { + this.init = Validate.notNull(init); + return this; + } + + public synchronized Lazy<T> reset(T value) { + this.value = value; + this.init = null; + return this; + } + + @Override + public T get() { + if (init != null) { + synchronized (this) { + if (init != null) { + value = init.get(); + init = null; + } + } + } + return value; + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/e8d3b813/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index a433b69..a604001 100644 --- a/pom.xml +++ b/pom.xml @@ -200,7 +200,7 @@ <microprofile.version>2.0</microprofile.version> <microprofile.config.version>1.3</microprofile.config.version> <microprofile.config.impl.version>1.2</microprofile.config.impl.version> - <microprofile.jwt.version>1.1</microprofile.jwt.version> + <microprofile.jwt.version>1.1.1</microprofile.jwt.version> <microprofile.jwt.impl.version>${project.version}</microprofile.jwt.impl.version> <!-- 1.1 Implementation not started yet --> <microprofile.fault-tolerance.version>1.0</microprofile.fault-tolerance.version> http://git-wip-us.apache.org/repos/asf/tomee/blob/e8d3b813/tck/microprofile-tck/jwt/src/test/resources/arquillian.xml ---------------------------------------------------------------------- diff --git a/tck/microprofile-tck/jwt/src/test/resources/arquillian.xml b/tck/microprofile-tck/jwt/src/test/resources/arquillian.xml index ec0be8a..3243a7c 100644 --- a/tck/microprofile-tck/jwt/src/test/resources/arquillian.xml +++ b/tck/microprofile-tck/jwt/src/test/resources/arquillian.xml @@ -24,7 +24,7 @@ <container qualifier="tomee-remote" default="true"> <configuration> <property name="debug">false</property> - <property name="httpPort">-1</property> + <property name="httpPort">8080</property> <property name="ajpPort">-1</property> <property name="stopPort">-1</property> <property name="classifier">microprofile</property>
