2014-12-19 2 views
0

Вот мой файл конфигурации, который я использую для создания объекта DAO.Spring jdbc template Как расшифровать пароль?

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
    <property name="url" value="jdbc:oracle:thin:@XXX.XX.XX.XXX:XXX:XXX"/> 
    <property name="username" value="encryptedUsername"/> 
    <property name="password" value="decrytedPassword"/> 
</bean> 

<bean id="fiBillJDBCTemplate" class="com.tfl.fi.billing.dao.FIBillingDAOImpl"> 
<property name="dataSource" ref="dataSource" /> 
</bean> 

</beans> 

Обычно мы можем создать объект базы данных следующим образом

ApplicationContext context = 
       new ClassPathXmlApplicationContext("Parent.xml"); 
     FIBillingDAOImpl dao = 
      (FIBillingDAOImpl)context.getBean("fiBillJDBCTemplate"); 

Но это не будет работать, как пароль хранится в XML-файле в зашифрованном виде.

Как можно создать объект DAO таким образом, чтобы пароль был дешифрован.

+0

И имя пользователя и пароль зашифрованы или только пароль в conf.xml? – sol4me

+0

имя пользователя и пароль дешифрованы. –

ответ

2

Вы можете расширить DriverManagerDataSource для обработки логики дешифрования. Вам нужно добавить логику для декодирования пароля и вернуть его из метода decode, например.

import org.springframework.jdbc.datasource.DriverManagerDataSource; 

import java.sql.SQLFeatureNotSupportedException; 
import java.util.logging.Logger; 

public class EncryptedDriverManagerDataSource extends DriverManagerDataSource { 

    @Override 
    public String getPassword() { 
     String password = super.getPassword(); 
     return decode(password); 
    } 

    /** 
    * You can implement you own decoding method. 
    */ 
    private String decode(String decode) { 
     //HERE 
    } 

    @Override 
    public Logger getParentLogger() throws SQLFeatureNotSupportedException { 
     return null; 
    } 
} 

После этого в файле конфигурации весной использовать этот класс в качестве источника данных

<bean id="dataSource" class="EncryptedDriverManagerDataSource"> 
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
    <property name="url" value="jdbc:oracle:thin:@XXX.XX.XX.XXX:XXX:XXX"/> 
    <property name="username" value="foo"/> 
    <property name="password" value="encryptedPassword"/> 
</bean> 
1

Класс используется здесь (org.springframework.jdbc.datasource.DriverManagerDataSource) не может быть изменен.

Я предлагаю вам либо:

  1. Override этот класс и переопределить метод SetPassword для того, чтобы расшифровать значение пароля.

  2. Использовать пользовательский заполнитель свойств, что делает шифрование (что-то вроде this)

Смежные вопросы