Skip to content

Commit

Permalink
Working external configuration through Spring Boot application.proper…
Browse files Browse the repository at this point in the history
…ties
  • Loading branch information
jimmidyson committed Jan 16, 2015
1 parent 273e945 commit a5246b8
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 31 deletions.
@@ -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;
}
}
Expand Up @@ -4,31 +4,38 @@
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
*
* @author <a href="mailto:jimmidyson@gmail.com">Jimmi Dyson</a>
* @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() {
Expand All @@ -39,7 +46,7 @@ public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedS

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) {
Expand All @@ -50,7 +57,7 @@ public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedS
}

@Bean
public TomcatContextCustomizer getKeycloakContextCustomizer() {
public TomcatContextCustomizer getTomcatKeycloakContextCustomizer() {
return new TomcatContextCustomizer() {
@Override
public void customize(Context context) {
Expand All @@ -69,31 +76,9 @@ public void customize(Context context) {

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;
}
}


}
@@ -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 {

}

0 comments on commit a5246b8

Please sign in to comment.