KEYCLOAK-1289 Support environment variables in keycloak.json

This commit is contained in:
Stian Thorgersen
2015-05-11 09:11:09 +02:00
parent e3b0cc7093
commit ccbd4bace1
3 changed files with 32 additions and 10 deletions

View File

@@ -0,0 +1,25 @@
package org.keycloak.util;
import java.util.Properties;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class SystemEnvProperties extends Properties {
@Override
public String getProperty(String key) {
if (key.startsWith("env.")) {
return System.getenv().get(key.substring(4));
} else {
return System.getProperty(key);
}
}
@Override
public String getProperty(String key, String defaultValue) {
String value = getProperty(key);
return value != null ? value : defaultValue;
}
}

View File

@@ -3,6 +3,8 @@ package org.keycloak.util;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Map;
import java.util.Properties;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.io.IOContext;
@@ -16,6 +18,8 @@ import org.codehaus.jackson.util.JsonParserDelegate;
*/
public class SystemPropertiesJsonParserFactory extends MappingJsonFactory {
private static final Properties properties = new SystemEnvProperties();
@Override
protected JsonParser _createJsonParser(byte[] data, int offset, int len, IOContext ctxt) throws IOException {
JsonParser delegate = super._createJsonParser(data, offset, len, ctxt);
@@ -34,8 +38,6 @@ public class SystemPropertiesJsonParserFactory extends MappingJsonFactory {
return new SystemPropertiesAwareJsonParser(delegate);
}
public static class SystemPropertiesAwareJsonParser extends JsonParserDelegate {
public SystemPropertiesAwareJsonParser(JsonParser d) {
@@ -45,7 +47,7 @@ public class SystemPropertiesJsonParserFactory extends MappingJsonFactory {
@Override
public String getText() throws IOException {
String orig = super.getText();
return StringPropertyReplacer.replaceProperties(orig);
return StringPropertyReplacer.replaceProperties(orig, properties);
}
}
}

View File

@@ -25,6 +25,7 @@ import org.keycloak.services.scheduled.ScheduledTaskRunner;
import org.keycloak.services.util.JsonConfigProvider;
import org.keycloak.timer.TimerProvider;
import org.keycloak.util.JsonSerialization;
import org.keycloak.util.SystemEnvProperties;
import javax.servlet.ServletContext;
import javax.ws.rs.core.Application;
@@ -139,14 +140,8 @@ public class KeycloakApplication extends Application {
}
if (node != null) {
Properties properties = new Properties();
properties.putAll(System.getProperties());
for(Map.Entry<String, String> e : System.getenv().entrySet()) {
properties.put("env." + e.getKey(), e.getValue());
}
Properties properties = new SystemEnvProperties();
Config.init(new JsonConfigProvider(node, properties));
return;
} else {
log.warn("Config 'keycloak-server.json' not found");