Java Spring jdbc模板如何解密密码?

Java Spring jdbc模板如何解密密码?,java,spring-jdbc,password-encryption,Java,Spring Jdbc,Password Encryption,这是我用来创建DAO对象的配置文件 <?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"

这是我用来创建DAO对象的配置文件

<?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>
但这不起作用,因为存储在xml文件中的密码是加密的


DAO对象如何以密码将被解密的方式生成。

您可以扩展
drivermanagedatasource
来处理解密逻辑。您需要添加解码密码的逻辑,并从
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;
    }
}
之后,在spring配置文件中使用该类作为数据源

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

您可以扩展
DriverManager数据源
来处理解密逻辑。您需要添加解码密码的逻辑,并从
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;
    }
}
之后,在spring配置文件中使用该类作为数据源

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

此处使用的类(
org.springframework.jdbc.datasource.driverManager数据源
)无法更改

我建议你:

  • 重写此类,并重写setPassword方法以解密密码值

  • 使用进行加密的自定义属性占位符(类似)

  • 无法更改此处使用的类(
    org.springframework.jdbc.datasource.driverManager数据源

    我建议你:

  • 重写此类,并重写setPassword方法以解密密码值

  • 使用进行加密的自定义属性占位符(类似)


  • 用户名和密码都是加密的,或者conf.xml中只有密码?用户名和密码都是解密的。用户名和密码都是加密的,或者conf.xml中只有密码?用户名和密码都是解密的。