2

使用类型安全配置,既可以执行变量替换,也可以直接覆盖键和值:

config {
 substitution.required = ${VAR}
 should.not.override = "should not be overridden"
}

java -jar executable.jar -Dconfig.should.not.override="This is a security risk"

进行变量替换的能力允许我将应该外部化的配置外部化,例如数据库 URL,这将根据部署环境(staging、qa、prod)而有所不同。

但是,如果潜在的黑客使用恶意配置重新启动应用程序,那么彻底覆盖任何内容的能力都会带来安全风险。

是否可以允许变量替换但抑制完全覆盖???

4

1 回答 1

1

您可以查看通过命令行提供的覆盖ConfigFactory.defaultOverrides(),并在调用之前检查它是否包含任何禁止的内容ConfigFactory.load()

另一种选择是自己构建一个 Config 对象,ConfigFactory.load(String resourceBasename)而不是将命令行覆盖合并到其中。

于 2016-10-27T09:37:29.697 回答