Hibernate配置文件hibernate.cfg.xml中存放了我们连接数据库的相关信息,其中设计到许多数据库的敏感信息,比如连接地址,用户名和密码,有时候我们交由发布组进行发布时并不希望他们看到数据库的连接密码,就需要对hibernate配置文件中的部分信息进行加密
给hibernate配置文件加密解密的方案的方案有很多。
第一步:新建自定义的SessionFactionBean,并继承AnnotationSessionFactoryBean
package com;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
public class ZtkjAnnotationSessionFactoryBean extends AnnotationSessionFactoryBean {
@Override
public void setDataSource(DataSource dataSource) {
String password =((BasicDataSource) dataSource).getPassword();
//通过ZtkjCryptUtil类进行解密
String decryPassword = ZtkjCryptUtil.decodeStr(password);
//重新赋值
((BasicDataSource) dataSource).setPassword(decryPassword);
super.setDataSource(dataSource);
}
}
ZtkjCryptUtil.java是加密和解密类(DES对称加密,大家自己可以写我)
第二步:修改Spring配置文件
<!-- Hibernate配置 -->
<bean id="sessionFactory" class="com.ZtkjAnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="namingStrategy">
<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache/ehcache-hibernate-local.xml</prop>
<prop key="hibernate.connection.provider_class">com.ZtkjDriverManagerConnectionProvider</prop>
</props>
</property>
<property name="packagesToScan" value="com.chinacnit" />
</bean>
(注:仅修改了第一行代码 class="com.ZtkjAnnotationSessionFactoryBean")
这样就可以完成了加密配置文件,参考了http://www.lupaworld.com/tutorial-view-aid-1847.html
如果你的配置密码的地方配置在hibertate属性下面,可以参考http://aguu125.iteye.com/blog/579402
还有更好的方法,可惜没有弄出来。http://sklst.iteye.com/blog/283798 (方案一)
这博客里面提到的【连接供应器】,不知道那里没有配置好,总是没有进去自己建的【连接供应器】