Temple Coding

  • Home
  • Open Source
  • About
    • Books I am reading
    • About
RSS
Category Archives: Java

VRaptor e o Hibernate.cfg encriptado com jasypt

Posted on 14/04/2010 by vintem
1 Comment

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:

?View Code XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<hibernate-configuration>
    <session-factory>
        <property name="connection.provider_class">
            org.jasypt.hibernate.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider
 
        </property>
        <property name="connection.encryptor_registered_name">
            configurationHibernateEncryptor
        </property>
        <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.1.1:1521:XE</property>
        <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="hibernate.connection.username">srcweb</property>
        <property name="hibernate.connection.password">ENC(r4Tjm3PB0LndmGQ/RqRBRA==)</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
        <!-- mappings -->
    </session-factory>
</hibernate-configuration>

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:

?View Code XML
1
2
3
4
<context-param>
    <param-name>br.com.caelum.vraptor.provider</param-name>
    <param-value>com.seu.namespace.provider.CustomProvider</param-value>
</context-param>

A classe CustomProvider ficou assim:

?View Code JAVA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

Tweet
government,politics news,politics news,politics
Categories: Java | Tags: hibernate, jasypt, java, vraptor
  • Categories

    • .NET (1)
    • ASP.NET (1)
    • ASPNET MVC (15)
    • Blog (1)
    • Source Code Control (2)
    • Development (10)
    • Java (1)
    • JavaScript (2)
    • jQuery (1)
    • Reading (5)
    • Ruby (2)
    • Ruby on Rails (1)
    • Sem categoria (23)
    • Testing (4)
  • Language

    • English
    • Português
  • Tags

    agilidade asp.net asp.net mvc asp.net vc automapper blog code templates controle de versoes css dataaccess dependency injection ebook encoding eventos excecoes firebug git globalizacao hibernate iis ironruby jasypt java javascript jquery json leitura less mvccontrib qcon rails ruby selenium simpledata snippet stored procedures structuremap tdc templates testes testes integrados visualstudio vraptor windsor
© Temple Coding. Proudly Powered by WordPress | Nest Theme by YChong