keycloak-developers
Changes
integration/spring-boot/src/main/java/org/keycloak/adapters/springboot/KeycloakSpringBootConfigResolver.java 28(+28 -0)
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 {
+
+}