我正在使用在Docker容器中运行的Keycloak服务器。
我开发了一个用户存储提供程序以连接到客户端数据库,以搜索用户信息和登录验证。
我在代码内部编写了数据库连接属性,但是现在是时候正确地做到这一点了,例如在启动时向Docker容器提供该信息并从代码中获取该信息。
我想我的UserStorageProviderFactory的init(Config.Scope config)
方法是查找这些参数的地方。这里的config
参数包含文件standalone.xml
中的信息,但是我需要在启动时将连接参数传递给Docker,以便可以轻松地对其进行修改。
我怎么能这样呢?
答案 0 :(得分:1)
您可以使用jboss-cli脚本将您的UserStorageProvider添加到独立的/-ha.xml,其属性可以由传递给容器的环境变量设置。
示例:
假设我们有一个spi.cli脚本,其中包含以下内容:
/subsystem=keycloak-server/spi=my-spi/provider=my-custom-auth-provider:add(enabled=true,properties={"my.custom.property", "${env.MY_ENV:myDefaultValue}"})
可以将其放在容器的/opt/jboss/startup-scripts
文件夹中以在启动时自动运行,请参见Keycloak docker documentation。
运行时,它将独立生成以下内容:
<spi name="my-spi">
<provider enabled="true" name="my-custom-auth-provider">
<properties>
<property name="my.custom.property" value="${env.MY_ENV:myDefaultValue}"/>
</properties>
</provider>
</spi>
然后可以使用init方法中的Config.Scope
通过代码访问这些属性。
例如config.get("my.custom-property")
。
这将检索传递给容器-e MY_ENV=test_value
的值。
答案 1 :(得分:0)
Docker容器必须使用-e
选项运行,例如:
-e ENV_VAR_1=env_var_value1
它可能包含所需的-e选项。另一种方法是使用--env-file
选项附加文件中包含的变量。
然后在用户存储提供者代码中,您可以检查环境变量的值,例如:
System.getenv("ENV_VAR_1")