我正在研究应该部署到Azure的Spring Boot应用程序。 通过使用以下依赖性,我设法将KeyVault的机密用于敏感的应用程序属性:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-keyvault-secrets-spring-boot-starter</artifactId>
<version>2.1.6</version>
</dependency>
通过设置属性azure.keyvault.uri=https://my-vault.vault.azure.net
和配置托管服务身份,我只需像这样从KeyVault注入秘密名称:
@Value("${ServerPassphrase}")
String serverPassphrase;
现在我已建立数据库连接,并且密码具有常规密钥spring.datasource.password
。不幸的是,Azure KeyVault中的秘密名称中不允许使用点。 :-(
是否有一种简单的方法将点替换为在KeyVault中允许使用字符的破折号,还是我必须编写一个自定义属性解析器作为包装器?
答案 0 :(得分:0)
秘密名称只能包含字母数字字符和破折号。
秘密名称只是一个名称,我们需要的是它的值。我用破折号代替了点。
@Value("${spring-datasource-password}")
private String dataSourcePassword;
更新:
我想知道是否有一种简单的方法告诉spring使用破折号 而不是点,因此无需编写额外的代码。
据我所知,没有办法。
答案 1 :(得分:0)
因此,毕竟,似乎没有简单的方法告诉Spring Boot使用破折号而不是点。
最后,我最终在MainConfig中编写了一个自定义re.sub("[^0-9]", "", ctext)
和一个自定义DataSource
来为tomcat设置所有ssl属性。
对于有人到这里来的情况,寻找解决此问题或类似问题的方法,我将发布一些可能有用的代码段。
数据源代码(我使用点符号从应用程序属性中读取所有常见属性,仅从KeyVault中读取用户名和密码)
ServletWebServerFactory
ServletWebServerFactory的代码(所有使用的值都使用@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();
}
-注解如上注入):
@Value
在其他一些地方,我不得不使用类似的东西,但是由于这是专门针对我们的解决方案,因此我不会在此处发布。我认为您可能会从发布的代码中了解如何解决此类问题。
答案 2 :(得分:0)
在this problem中,他们不需要使用属性文件的技巧,只需将'-'用作'。进行密钥保险,API似乎会自动将“-”替换为“。”。 经过测试并可以使用azure-keyvault-secrets-spring-boot-starter的2.3.2版本
“ Azure Key Vault Secrets Spring启动启动器”的官方文档中 有关于create new policy的部分 您必须在属性文件中使用不兼容的属性。 但这对我不起作用
spring.datasource.password=${spring-datasource-password}