当前位置: 首页 > 知识库问答 >
问题:

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

孙昂然
2023-03-14

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

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

通过设置popertyazure.KeyVault.uri=https://my-vault.vault.azure.net并配置托管服务标识,我只需从KeyVault中插入秘密名称,如下所示:

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

现在我有了一个数据库连接,密码具有通常的键spring.datasource.password。不幸的是,Azure KeyVault中的秘密名称不允许使用圆点。-(

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

共有1个答案

何修能
2023-03-14

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

DataSource的代码(我使用点符号从应用程序属性中读取所有公共属性,只从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如上注入):

@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;
}
 类似资料:
  • 这可能已经有人回答或问了,但我无法找到一个满足我的用例。通过在application.properties文件中指定以下属性,我正在spring boot web应用程序(注意:我的应用程序打包为“war”,它不包含嵌入的tomcat)中建立数据库连接。 我正在获得加密的一个“ilwjvmfqopxvbyue17zn6hx8mljngiuu”,并将其放置在属性文件中,如下所示 但是spring无法

  • 问题内容: 我想将带有sqlite3的应用程序部署为Heroku上的数据库。但是,似乎Heroku不支持将sqlite3作为数据库的应用程序。是真的吗 无法在Heroku上部署由sqlite3支持的应用程序吗? PS:我已经使用PythonAnywhere成功部署了我的应用程序,但是现在想知道是否有使用Heroku部署它的任何可能方法。 问题答案: 由于Heroku的dynos没有可在部署之间持久

  • 我已经成功地将我的nodejs后端和PostgreSQL数据库连接到我的ubuntu服务器。我还安装了nginx作为反向代理,当我访问浏览器上的公共ip地址时,它正在工作。 我的问题是,当我关闭Node.js服务器,安装pm2并正确配置pm2时,当我试图加载我的IOS模拟器时,会出现应用程序内的错误,但没有加载任何东西。(我将本地数据库中的所有内容复制到ubuntu数据库中,因此必须显示相同的帖子

  • 我是kubernetes的新手,需要在openshift平台上使用k8s confimap将springboot应用程序的属性文件外部化。我已将属性文件保存在git repo中,作为“greeter.message=Spring Bootmyapplication.properties已在库伯内特斯上挂载为卷!”并使用“oc create confimap myconfig--from-file=

  • 本文向大家介绍SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools对数据库密码加密的方法,包括了SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools对数据库密码加密的方法的使用技巧和注意事项,需要的朋友参考一下 1.在本地Maven仓库中打开Powershell 2.输入命令,然

  • Spring Boot版本为1.5.6 使用的数据库是SQL Server2016,它也是在docker(windows容器)上。 问题:每当我重新启动SQL DB容器时,应用程序开始给出这个错误。 任何想法可以做什么来解决这个问题。 多谢了。