原文:http://blog.csdn.net/sdbany/article/details/3132809
hibernate的cfg.xml配置文件用户名密码是明文存放,配置文件里的参数信息解析都是通过provider_class负责。定义一个子类继承provider_class连接供应类。
1、这里我用的是c3p0的连接供应类,故要继承C3P0ConnectionProvider
package utils;
import java.util.Map;
import org.hibernate.HibernateException;
import org.hibernate.c3p0.internal.C3P0ConnectionProvider;
import org.hibernate.cfg.Environment;
public class CustomDriverManagerConnectionProvider extends C3P0ConnectionProvider {
public CustomDriverManagerConnectionProvider() {
super();
}
/*
* (non-Javadoc)
*
* @see org.hibernate.connection.DriverManagerConnectionProvider#configure(java.util.Properties)
*/
@Override
public void configure(Map props) throws HibernateException {
String user = (String)props.get(Environment.USER);
String password = (String)props.get(Environment.PASS);
if(ToolUtils.stringIsNull(user)){
throw new HibernateException("数据库帐号不能为空!");
}
if(ToolUtils.stringIsNull(password)){
throw new HibernateException("数据库密码不能为空!");
}
//解密
AESUtils aes = new AESUtils();
props.put(Environment.USER, aes.decode(user));
props.put(Environment.PASS, aes.decode(password));
super.configure(props);
}
}
2、把自定义的连接提供类配置到hibernate.cfg.xml
<property name="hibernate.connection.provider_class">utils.CustomDriverManagerConnectionProvider</property>