为了在spring 3中建立数据库连接,我使用已定义bean的xml
<bean id="griffDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close" p:driverClass="${DRIVER_CLASS}" p:jdbcUrl="${DB_URL}"
p:minPoolSize="${MIN_DB_POOL_SIZE}" p:maxPoolSize="${DB_POOL_SIZE}"
p:maxStatements="${DB_POOL_SIZE}"p:idleConnectionTestPeriod="${IDLE_CONNECTION_TEST_PERIOD}"p:loginTimeout="${LOGIN_TIMEOUT}" scope="singleton"></bean>
这里从属性文件
中读取DB_URL值DB_URL:jdbc:mysql://localhost:3306/databaseautoReconnect=true&user=root&password= [B@42e21073
url
中的此密码使用AES
加密。
要求是我应该编写一个代码,当春天去连接数据库时,它应该自己解密密码并建立连接。
我怎样才能做到这一点?
答案 0 :(得分:0)
我使用过BASE64Encoder&amp; BASE64Decoder。稍后您将修改我的代码以使用安全/更好的加密/解密算法。
您首先使用以下代码编码数据库密码:
private String encode(String str) {
BASE64Encoder encoder = new BASE64Encoder();
str = new String(encoder.encodeBuffer(str.getBytes()));
return str;
}
现在您使用org.apache.commons.dbcp.BasicDataSource的包装类并覆盖setPassword()方法:
import java.io.IOException;
import org.apache.commons.dbcp.BasicDataSource;
import sun.misc.BASE64Decoder;
public class MyCustomBasicDataSource extends BasicDataSource{
public synchronized void setPassword(String encodedPassword){
this.password = decode(encodedPassword);
}
private String decode(String password) {
BASE64Decoder decoder = new BASE64Decoder();
String decodedPassword = null;
try {
decodedPassword = new String(decoder.decodeBuffer(password));
} catch (IOException e) {
e.printStackTrace();
}
return decodedPassword;
}
}
这种方式您可以解码(BASE64Decoder)编码密码。