一般情况下开发都是在数据库配置文件中使用的明文密码,但在一些特殊情况下也会需要对其进行加密,否则会造成数据泄露。
最近公司刚好有这个需求,趁此机会将我的实现方法写下来以供大家参考。
原理:直接重写DataSource类的setPassword方法
创建一个DataSource类继承spring-mybatis.xml文件中配置的DataSource类,然后重写它的setUsername和setPassword方法。
如下:
我这里原本的配置是“org.springframework.jdbc.datasource.DriverManagerDataSource”,我自己的DataSource类就继承它
import java.io.UnsupportedEncodingException;
import java.util.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class MyDataSource extends DriverManagerDataSource {
private final static Logger logger = LoggerFactory.getLogger(MyDataSource.class);
public MyDataSource() {
super();
}
@Override
public void setPassword(String password){
try{
super.setPassword(decode(password));
}catch(Exception e){
logger.error(e.getMessage());
}
}
@Override
public void setUsername(String username) {
try{
super.setUsername(decode(username));
}catch(Exception e){
logger.error(e.getMessage());
}
}
//加密
public static String encodeToString(String password){
//编码
String str=null;
try {
str = Base64.getEncoder().encodeToString(password.getBytes("utf-8"));
System.out.println("编码结果为:"+str);
} catch (UnsupportedEncodingException e) {
logger.error(e.getMessage());
}
return str;
}
//解密
public static String decode(String password){
//解码
String str=null;
byte[] str1=Base64.getDecoder().decode(password);
try {
str = new String(str1,"utf-8");
System.out.println("解码结果为:"+str);
} catch (UnsupportedEncodingException e) {
logger.error(e.getMessage());
}
return str;
}
// public static void main(String[] args) {
// encodeToString("admin");
// decode(encodeToString("admin"));
// }
}
然后再将配置文件中原本的“org.springframework.jdbc.datasource.DriverManagerDataSource”改成自己的类
最后将jdbc.properties文件中的用户名和密码改为加密后的文本就可以了。
以上就是mybatis-数据库配置文件密码加密的全部内容,如果有不同见解欢迎在评论区交流。
参考文章:https://blog.csdn.net/qq_24241631/article/details/80294144