您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Spring applicationContext.xml中使用编码的密码作为数据源

在Spring applicationContext.xml中使用编码的密码作为数据源

我回答自己的问题可能很有趣。但我还是想告诉我解决方案,其他可能也遇到过类似问题的人。

为简单起见,我使用了BASE64Encoder和BASE64Decoder。稍后,我将修改代码以使用安全/更好的加密/解密算法。

我已经使用以下代码数据库密码(例如:root)进行了编码:

private String encode(String str) {
        BASE64Encoder encoder = new BASE64Encoder();
        str = new String(encoder.encodeBuffer(str.getBytes()));
        return str;
    }

并将编码后的密码放在我的database.properties文件中,如下所示:

之前

db.driverClassName=com.MysqL.jdbc.Driver
db.url=jdbc:MysqL://localhost/myDB
db.username=root
db.password=root

db.driverClassName=com.MysqL.jdbc.Driver
db.url=jdbc:MysqL://localhost/myDB
db.username=root
db.password=cm9vdA==  (Note: encoded 'root' by using BASE64Encoder)

现在,我为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 CustomBasicDataSource() {
        super();
    }

    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)database.properties中提供的编码密码

并且还修改了springApplicationContext.xml文件中提到的我的dataSource bean的class属性

<beans:bean id="dataSource" class="edu.config.db.datasource.custom.MyCustomBasicDataSource" destroy-method="close">
    <beans:property name="driverClassName"><beans:value>${db.driverClassName}</beans:value></beans:property>
    <beans:property name="url"><beans:value>${db.url}</beans:value></beans:property>
    <beans:property name="username"><beans:value>${db.username}</beans:value></beans:property>
    <beans:property name="password"><beans:value>${db.password}</beans:value></beans:property>

谢谢。

Java 2022/1/1 18:15:44 有457人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶