Fra*_*ank 5 configuration azure spring-boot azure-keyvault
我正在开发一个应该部署到 Azure 的 Spring Boot 应用程序。使用以下依赖项,我设法将 KeyVault 中的机密用于敏感应用程序属性:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-keyvault-secrets-spring-boot-starter</artifactId>
<version>2.1.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
通过设置 popertyazure.keyvault.uri=https://my-vault.vault.azure.net并配置托管服务身份,我只需从 KeyVault 注入秘密名称,如下所示:
@Value("${ServerPassphrase}")
String serverPassphrase;
Run Code Online (Sandbox Code Playgroud)
现在我有一个数据库连接,并且密码具有常用的密钥spring.datasource.password。遗憾的是,Azure KeyVault 中的秘密名称中不允许使用点。:-(
有没有一种简单的方法可以将点替换为 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();
}
Run Code Online (Sandbox Code Playgroud)
ServletWebServerFactory 的代码(所有使用的值都使用 -annotation 如上所述注入@Value):
@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;
}
Run Code Online (Sandbox Code Playgroud)
在其他一些地方我必须使用类似的东西,但由于这是专门针对我们的解决方案的,所以我不会将其发布在这里。我想您可能会从发布的代码中了解如何解决此类问题。
| 归档时间: |
|
| 查看次数: |
4711 次 |
| 最近记录: |