0

我在 Vault 中存储了一些数据库凭据。
如何在 Hibernate init 之前获取/使用 Hibernate 的凭据?

4

2 回答 2

1

您宁愿向数据源提供凭据,也不愿向 Hibernate 提供凭据。没有将凭据注入persistence.xml配置的集成。

根据您的应用程序和设置,您可以选择@StanislavL 建议的路线。

如果您的应用程序是基于 Spring Boot 的,那么请查看Spring Cloud Vault MySQL 示例。它为您配置spring.datasource.usernamespring.datasource.password因此您不需要任何额外的设置。

于 2017-06-02T18:50:35.847 回答
1

有我的解决方案。

public class DatabaseCredentialsLogic {
    private String vaultSecretPath;
    private VaultTemplate vaultTemplate;
    private DatabaseCredentials databaseCredentials;

    @Autowired
    public DatabaseCredentialsLogic(VaultTemplate vaultTemplate, Environment env) {
        this.vaultTemplate = vaultTemplate;
        vaultSecretPath = env.getProperty("vault.secret.path");
    }

    public void init() {
        VaultResponseSupport<DatabaseCredentials> response = 
            vaultTemplate.read(vaultSecretPath, DatabaseCredentials.class);
        databaseCredentials = response.getData();
    }

    public String getUrl() {
        return databaseCredentials.getUrl();
    }

    // Getters login & password
}

并且只是在上下文中使用了 Spring 表达式语言

<context:component-scan base-package="my.package" />
<bean id="databaseCredentials" class="my.package.DatabaseCredentialsLogic" init-method="init"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
    <property name="url" value="#{databaseCredentials.url}" />
    <property name="username" value="#{databaseCredentials.login}" />
    <property name="password" value="#{databaseCredentials.password}" />
</bean>
于 2017-06-03T14:27:29.220 回答