keycloak-developers

Details

diff --git a/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfigResolver.java b/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfigResolver.java
new file mode 100644
index 0000000..c5834c2
--- /dev/null
+++ b/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfigResolver.java
@@ -0,0 +1,28 @@
+package org.keycloak.adapters.springboot;
+
+import org.keycloak.adapters.HttpFacade;
+import org.keycloak.adapters.KeycloakDeployment;
+import org.keycloak.adapters.KeycloakDeploymentBuilder;
+import org.keycloak.representations.adapters.config.AdapterConfig;
+
+public class KeycloakSpringBootConfigResolver implements org.keycloak.adapters.KeycloakConfigResolver {
+
+    private KeycloakDeployment keycloakDeployment;
+
+    private static AdapterConfig adapterConfig;
+
+    @Override
+    public KeycloakDeployment resolve(HttpFacade.Request request) {
+        if (keycloakDeployment != null) {
+            return keycloakDeployment;
+        }
+
+        keycloakDeployment = KeycloakDeploymentBuilder.build(KeycloakSpringBootConfigResolver.adapterConfig);
+
+        return keycloakDeployment;
+    }
+
+    static void setAdapterConfig(AdapterConfig adapterConfig) {
+        KeycloakSpringBootConfigResolver.adapterConfig = adapterConfig;
+    }
+}
\ No newline at end of file
diff --git a/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfiguration.java b/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfiguration.java
index 2a914dd..e9056e2 100755
--- a/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfiguration.java
+++ b/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfiguration.java
@@ -4,22 +4,19 @@ import org.apache.catalina.Context;
 import org.apache.tomcat.util.descriptor.web.LoginConfig;
 import org.apache.tomcat.util.descriptor.web.SecurityCollection;
 import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
-import org.keycloak.adapters.HttpFacade;
-import org.keycloak.adapters.KeycloakConfigResolver;
-import org.keycloak.adapters.KeycloakDeployment;
-import org.keycloak.adapters.KeycloakDeploymentBuilder;
 import org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
 import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
 import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
 import org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory;
 import org.springframework.boot.context.embedded.tomcat.TomcatContextCustomizer;
 import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
 import org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-import java.io.InputStream;
-
 /**
  * Keycloak authentication integration for Spring Boot
  *
@@ -27,8 +24,18 @@ import java.io.InputStream;
  * @version $Revision: 1 $
  */
 @Configuration
+@ConditionalOnWebApplication
+@EnableConfigurationProperties(KeycloakSpringBootProperties.class)
 public class KeycloakSpringBootConfiguration {
 
+    private KeycloakSpringBootProperties keycloakProperties;
+
+    @Autowired
+    public void setKeycloakSpringBootProperties(KeycloakSpringBootProperties keycloakProperties) {
+        this.keycloakProperties = keycloakProperties;
+        KeycloakSpringBootConfigResolver.setAdapterConfig(keycloakProperties);
+    }
+
     @Bean
     public EmbeddedServletContainerCustomizer getKeycloakContainerCustomizer() {
         return new EmbeddedServletContainerCustomizer() {
@@ -39,7 +46,7 @@ public class KeycloakSpringBootConfiguration {
 
                     container.addContextValves(new KeycloakAuthenticatorValve());
 
-                    container.addContextCustomizers(getKeycloakContextCustomizer());
+                    container.addContextCustomizers(getTomcatKeycloakContextCustomizer());
                 } else if (configurableEmbeddedServletContainer instanceof UndertowEmbeddedServletContainerFactory) {
                     throw new IllegalArgumentException("Undertow Keycloak integration is not yet implemented");
                 } else if (configurableEmbeddedServletContainer instanceof JettyEmbeddedServletContainerFactory) {
@@ -50,7 +57,7 @@ public class KeycloakSpringBootConfiguration {
     }
 
     @Bean
-    public TomcatContextCustomizer getKeycloakContextCustomizer() {
+    public TomcatContextCustomizer getTomcatKeycloakContextCustomizer() {
         return new TomcatContextCustomizer() {
             @Override
             public void customize(Context context) {
@@ -69,31 +76,9 @@ public class KeycloakSpringBootConfiguration {
 
                 context.addConstraint(constraint);
 
-                context.addParameter("keycloak.config.resolver", SpringBootKeycloakConfigResolver.class.getName());
+                context.addParameter("keycloak.config.resolver", KeycloakSpringBootConfigResolver.class.getName());
             }
         };
     }
 
-    public static class SpringBootKeycloakConfigResolver implements KeycloakConfigResolver {
-
-        private KeycloakDeployment keycloakDeployment;
-
-        @Override
-        public KeycloakDeployment resolve(HttpFacade.Request request) {
-            if (keycloakDeployment != null) {
-                return keycloakDeployment;
-            }
-
-            InputStream configInputStream = getClass().getResourceAsStream("/keycloak.json");
-            if (configInputStream == null) {
-                keycloakDeployment = new KeycloakDeployment();
-            } else {
-                keycloakDeployment = KeycloakDeploymentBuilder.build(configInputStream);
-            }
-
-            return keycloakDeployment;
-        }
-    }
-
-
 }
diff --git a/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootProperties.java b/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootProperties.java
new file mode 100644
index 0000000..ee922d1
--- /dev/null
+++ b/integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootProperties.java
@@ -0,0 +1,9 @@
+package org.keycloak.adapters.springboot;
+
+import org.keycloak.representations.adapters.config.AdapterConfig;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = "keycloak", ignoreUnknownFields = false)
+public class KeycloakSpringBootProperties extends AdapterConfig {
+
+}