Essa semana eu tive que resolver esse problema. Estava eu fazendo um site em java usando o framework VRaptor (que é muito bom por sinal) e eu precisa encriptar a senha do arquivo Hibernate.cfg.xml – acho que isso devia ser o padrão, e por sinal não é. De qualquer forma, eu gastei um tempo quebrando a cabeça pra fazer isso.
A solução que eu encontrei foi usar o framework jasypt que precisa de algumas configurações mas funciona muito bem.
Depois de baixar o jasypt e adicionar a lib no classpath, o arquivo hibernate.cfg.xml deve ficar assim:
org.jasypt.hibernate.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider configurationHibernateEncryptor org.hibernate.dialect.OracleDialect jdbc:oracle:thin:@192.168.1.1:1521:XE oracle.jdbc.driver.OracleDriver srcweb ENC(r4Tjm3PB0LndmGQ/RqRBRA==) true update org.hibernate.cache.HashtableCacheProvider
Nessa configuração o hibernate é informado que deve usar DriverManager do Jasypt. Também informamos o hibernate qual é o objeto responsável pela encriptação/decriptação, no nosso caso o configurationHibernateEncryptor.
Veja que a senha está encriptada e usando uma função ENC, é assim que o jasypt sabe que a informação está encriptada.
Agora, precisamos dizer para o hibernate qual é esse objeto configurationHibernateEncryptor. A solução que eu encontrei foi registrar na inicialização da aplicação.
Primeiro é preciso criar um provider customizado para o VRaptor. No arquivo web.xml adicione:
br.com.caelum.vraptor.provider com.seu.namespace.provider.CustomProvider
A classe CustomProvider ficou assim:
public class CustomProvider extends SpringProvider
{
@Override
protected void registerCustomComponents(ComponentRegistry registry) {
registry.register(SessionCreator.class, SessionCreator.class);
registry.register(SessionFactoryCreator.class, SessionFactoryCreator.class);
registry.register(HibernateTransactionInterceptor.class,
HibernateTransactionInterceptor.class);
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword("sua_senha");
HibernatePBEEncryptorRegistry registryEncryptor = HibernatePBEEncryptorRegistry.getInstance();
registryEncryptor.registerPBEStringEncryptor("configurationHibernateEncryptor",
encryptor);
}
}
Pronto, junto com o jasypt vem um arquivo encrypt.bat/encrypt.sh que você usa para gerar a senha encriptada da seguinte forma:
encrypt input=texto_para_encriptar password=sua_senha