gpt4 book ai didi

azure - 在 Spring Boot 应用程序中使用 Azure KeyVault 作为数据库密码

转载 作者:行者123 更新时间:2023-12-04 12:38:55 24 4
gpt4 key购买 nike

我正在开发一个应部署到 Azure 的 Spring Boot 应用程序。使用以下依赖项,我设法将 KeyVault 中的 secret 用于敏感应用程序属性:

    <dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-keyvault-secrets-spring-boot-starter</artifactId>
<version>2.1.6</version>
</dependency>

通过设置 poperty azure.keyvault.uri=https://my-vault.vault.azure.net 并配置托管服务身份,我只需从 KeyVault 注入(inject) secret 名称,如下所示:

@Value("${ServerPassphrase}")
String serverPassphrase;

现在我有一个数据库连接,并且密码具有常用 key spring.datasource.password。遗憾的是,Azure KeyVault 中的 secret 名称中不允许使用点。 :-(

是否有一种简单的方法可以将点替换为 KeyVault 中允许的字符的破折号,或者我是否必须编写自定义属性解析器作为包装器?

最佳答案

毕竟,似乎没有简单的方法来告诉 Spring Boot 使用破折号而不是点。我最终在 MainConfig 中编写了一个自定义 DataSource 以及一个自定义 ServletWebServerFactory 来设置 tomcat 的所有 ssl 属性。对于有人最终来到这里,寻找此问题或类似问题的解决方案的情况,我将发布一些可能有帮助的代码片段。

数据源代码(我使用点符号从应用程序属性中读取所有常见属性,仅从 KeyVault 读取用户名和密码):

@Value("${db-user}")
String dbUser;

@Value("${db-password}")
String dbPwd;

@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource getDataSource() {
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.username(dbUser);
dataSourceBuilder.password(dbPwd);
return dataSourceBuilder.build();
}

ServletWebServerFactory 的代码(所有使用的值均使用 @Value-annotation 注入(inject)):

@Bean
public ServletWebServerFactory servletContainer() {

TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
TomcatConnectorCustomizer tomcatConnectorCustomizer = connector -> {
connector.setPort(port);
connector.setScheme("https");
connector.setSecure(true);

Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
protocol.setSSLEnabled(true);
protocol.setKeystoreType(keyStoreType);
protocol.setKeystoreProvider(keyStoreProvider);
protocol.setKeystoreFile(keyStorePath);
protocol.setKeystorePass(keyStorePassword);
protocol.setKeyAlias(keyAlias);
protocol.setTruststoreFile(trustStorePath);
protocol.setTruststorePass(trustStorePassword);
protocol.setSSLVerifyClient(clientAuth);
};

tomcat.addConnectorCustomizers(tomcatConnectorCustomizer);
return tomcat;
}

在其他一些地方我必须使用类似的东西,但由于这是专门针对我们的解决方案的,所以我不会将其发布在这里。我想您可能会从发布的代码中了解如何解决此类问题。

关于azure - 在 Spring Boot 应用程序中使用 Azure KeyVault 作为数据库密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58282440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com