我正在使用在Docker容器中运行的Keycloak服务器。
我开发了一个用户存储提供程序以连接到客户端数据库,以搜索用户信息和登录验证。
我在代码中编写了数据库连接属性,但是现在是时候正确地做到这一点了,例如在启动时向Docker容器提供该信息并从代码中获取该信息。
我猜我的UserStorageProviderFactory的init(Config.Scope config)
方法是查找这些参数的地方。那里的config
参数包含来自文件standalone.xml
的信息,但我需要在启动时将连接参数传递给Docker,以便可以轻松修改它们。
我怎么能这样呢?
最佳答案
您可以使用jboss-cli脚本将您的UserStorageProvider添加到standalone / -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
。
关于docker - 如何在分布式环境中将数据库连接参数传递给Keycloak,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63505402/