常见个人开发基本都是直接使用明文密码配置数据库连接。但在一些重要数据存在时,在大数据横行时期,数据就相当重要了,比如银行,若是,用明文密码给爬到,那么造成数据泄露是很严重的。
因此,在这提供俩个密码加密连接的方法。
第一种:直接重写BasicDataSource接口的setPassword方法;
数据源,我用的是com.alibaba.druid.pool.DruidDataSource;你们看你的mybatis-spring.xml用的是啥,就继承哪个类。
package org.test.base.common;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.druid.pool.DruidDataSource;
public class TeradataConnetion extends DruidDataSource {
/**
*
*/
private static final long serialVersionUID = 5356438661505332271L;
private final static Logger logger = LoggerFactory.getLogger(TeradataSource.class);
public TeradataSource() {
super();
}
@Override
public void setPassword(String password){
try{
this.password = decode(password);
}catch(Exception e){
logger.error(e.getMessage());
}
}
@Override
public void setUsername(String username) {
try{
this.username = 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("root");
// decode(encodeToString("root"));
// }
}
重写setPassword之后,我们可以修改mybatis-spring.xml数据库配置,如下:
第二种:使用程序传递方式传递参数
代码示例:在sqlsessionfactory中处理
Stirng resource = "mybatis-config.xml";
InputStream inputStream;
InputStream in = Resources.getResourceAsStream("jdbc.properties");
Properties props = new Properties();
props.load(in);
String username = props.getProperty("username ");
String password= props.getProperty("password");
props.put("username ",CodeUtils.decode(username));
props.put("password",CodeUtils.decode(password));
inputStream = Reasources.getResourceAsStream(resource );
SqlSessionFactory ssf = new SqlSessionFactory Builder().build(inputStream ,props );