diff --git a/core/src/main/java/org/keycloak/util/SystemEnvProperties.java b/core/src/main/java/org/keycloak/util/SystemEnvProperties.java
new file mode 100644
index 0000000..1e54b52
--- /dev/null
+++ b/core/src/main/java/org/keycloak/util/SystemEnvProperties.java
@@ -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;
+ }
+
+}
diff --git a/core/src/main/java/org/keycloak/util/SystemPropertiesJsonParserFactory.java b/core/src/main/java/org/keycloak/util/SystemPropertiesJsonParserFactory.java
index 52f893d..a09a91b 100644
--- a/core/src/main/java/org/keycloak/util/SystemPropertiesJsonParserFactory.java
+++ b/core/src/main/java/org/keycloak/util/SystemPropertiesJsonParserFactory.java
@@ -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);
}
}
}
diff --git a/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java b/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
index d3586bc..b0f02ad 100755
--- a/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
+++ b/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
@@ -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");