gpt4 book ai didi

spring - 对 spring applicationContext.xml 中使用的数据源使用编码密码

转载 作者:IT老高 更新时间:2023-10-28 13:49:13 26 4
gpt4 key购买 nike

我想在下面提到的 springApplicationContext.xml 中保留编码密码

有什么方法可以实现吗?

目前我已经使用属性占位符配置了所有属性如下所示,但原始密码仍然在我的 database.properties 中打开

springApplicationContext.xml

<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 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>
</beans:bean>

但实际值存在于我的 database.properties

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

我想要类似下面的东西:

springApplicationContext.xml(同上)

<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 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>
</beans:bean>

但密码属性值应该在我的 database.properties

中采用加密格式
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/myDB
db.username=root
db.password=3g6n72ef8x (using any encription method).

在建立新的数据库连接之前,我的数据源会在内部解密密码。

非常感谢您提供任何帮助/建议。

最佳答案

我回答自己的问题可能很有趣。但我仍然只是想告诉其他可能面临同样问题的人的解决方案..

为简单起见,我使用了 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的类属性。

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

谢谢。

关于spring - 对 spring applicationContext.xml 中使用的数据源使用编码密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12834604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com