1

我想以编程方式设置数据源的密码,并且仍然使用 Spring GCP 和 Spring Data 的自动配置。

背景

我想将我的密码作为加密 blob 获取并通过 Google KMS 解密。我读到 spring gcp auto configuration 改变了DataSourcePropertiesbean 以应用 gcp secific 配置(https://docs.spring.io/spring-cloud-gcp/docs/1.0.0.RELEASE/reference/html/_spring_jdbc.html#_literal_datasource_literal_creation_flow) .

现在我想再次改变DataSourceProperties暴露的 Bean GcpCloudSqlAutoConfiguration。暴露DataSourceProperties如下不起作用,因为GcpCloudSqlAutoConfiguration那时不知道要采用哪个Bean:由spring boot自动配置或我的配置。但是我的应该应用在配置的最后一步。

@Bean
public DataSourceProperties dataSourceProperties(DataSourceProperties dataSourceProperties) {
    dataSourceProperties.setPassword(getDecryptedSecret());
    return dataSourceProperties;
}

private String getDecryptedSecret() {
    // get encrypted password and decrypt it
    return "myDecryptedPassword"
}
4

2 回答 2

0

Cloud KMS 使用对称密钥 [1] 和/或非对称密钥 [2] 提供加密和解密数据。

您可以查看 DataSourceProperties[3] 了解更多 Spring Boot 支持的选项。

[1]- https://cloud.google.com/kms/docs/encrypt-decrypt

[2]- https://cloud.google.com/kms/docs/encrypt-decrypt-rsa

[3]- https://github.com/spring-projects/spring-boot/blob/v2.1.8.RELEASE/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/启动/自动配置/jdbc/DataSourceProperties.java

于 2019-09-09T15:57:57.993 回答
0

您应该能够提供自己的引导属性源,其中包含spring.datasource.password.

请参阅:https ://cloud.spring.io/spring-cloud-commons/multi/multi__spring_cloud_context_application_context_services.html#customizing-bootstrap-property-sources

完整答案在项目 GitHub 上:https ://github.com/spring-cloud/spring-cloud-gcp/issues/2330

于 2020-04-24T14:36:33.600 回答