2017-06-01 2 views
0

J'ai des informations d'identification de base de données stockées dans Vault.
Comment puis-je prendre/utiliser les informations d'identification pour Hibernate avant Hibernate init?Informations d'identification du coffre-fort de printemps et d'Hibernation

+0

Cela dépend de la façon dont vous Initialiser votre mise en veille prolongée. Pour autant que je puisse voir le coffre-fort fonctionne comme un stockage de propriétés, tout ce dont vous avez besoin est d'ajouter '@Value (" $ {password} ") String mot de passe;' et d'utiliser le mot de passe pour initialiser hibernate. – StanislavL

Répondre

1

Il y a ma solution.

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 
} 

Et utilisé l'expression de printemps Langue dans le contexte

<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> 
1

Vous préférez fournir des informations d'identification à votre source de données qu'à Hibernate. Il n'y a pas d'intégration pour injecter des informations d'identification dans une configuration persistence.xml. En fonction de votre application et de la configuration, vous souhaitez prendre la route proposée par @StanislavL. Si votre application est basée sur Spring Boot, regardez Spring Cloud Vault MySQL example. Il configure spring.datasource.username et spring.datasource.password pour vous, donc vous n'avez besoin d'aucune configuration supplémentaire.