首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

hibernate施用连接池并且处理数据库密码加密

2012-12-23 
hibernate使用连接池并且处理数据库密码加密hibernate使用连接池并且处理数据库密码加密明文密码太不安全

hibernate使用连接池并且处理数据库密码加密

hibernate使用连接池并且处理数据库密码加密明文密码太不安全使用加密吧!~ 在使用  hibernate框架时怎么来处理密码呢? 首先我们要找一个切入点 就是 连接池在什么时间读的配置 这个时候我们解密在给他 看hibernate配置   <property name="hibernate.connection.provider_class">    org.hibernate.connection.C3P0ConnectionProvider   </property> 这就是hibernate把连接交给专门的连接池类来负责 我们就在这里动手脚   <property name="hibernate.connection.provider_class">    name.ixr.connection.C3P0ConnectionProvider   </property> 这里换成我们自己的类,当然这个类要有原有类的功能 这里我们想到一个方法使用继承package name.ixr.connection; import java.util.Properties; import org.hibernate.cfg.Environment; import name.ixr.util.EncUtil; /** * 自定义C3P0处理 * 2009-10-10 * @author IXR * @version 1.0 */ public class C3P0ConnectionProvider extends org.hibernate.connection.C3P0ConnectionProvider { } }类有了怎么处理呢? 还有原有的类有什么方法? 需要下载 hibernate  code查看 我看了他的方法 大概了解了下 知道 hibernate读取完配置文件把配置文件对象交给了configure这个方法 然后重构这个方法,实现原来的太麻烦,就算复制代码太多我们只处理中间的一个环节所以没有 必要完全重写,我们用多态吧,都继承了也是为什么上边我用继承,看我怎么写的/*** 修改读取配置文件的业务 * 这里主要为了解密密码 */public void configure(Properties props){ //获取配置密码 String password=props.getProperty(Environment.PASS); //密码解 password=EncUtil.encToString(password); //处理密码 props.setProperty(Environment.PASS, password); //交给父类处理 super.configure(props); }这样密码就解密重新设置了 然后交给父类来实现原有应该实现的功能呵呵!~ 处理完毕EncUtil就是我加密解密类!~ 你们可以用自己的加密类!~ 如果在Spring里,上述方法是不行的。因为Spring直接把用户名密码给了datasource。 hibernate的属性不能生效 下面是一种便通的方法。需要自己实现一个Configurer类<bean id="propertyConfigurer" class="com.mchange.v2.c3p0.ComboPooledDataSource">              <property name="driverClass"><value>${hibernate.connection.driver_class} </value></property>             <property name="jdbcUrl"><value>${hibernate.connection.url}</value></property>             <property name="user"><value>${hibernate.connection.username} </value></property>             <!-- property name="password"><value>${hibernate.connection.password} </value></property-->             <property name="initialPoolSize"><value>${initialPoolSize}</value></property>             <property name="minPoolSize"><value>${hibernate.c3p0.min_size} </value></property>             <property name="maxPoolSize"><value>${hibernate.c3p0.max_size} </value></property>             <property name="idleConnectionTestPeriod"><value>${hibernate.c3p0.idle_test_period} </value></property>             <property name="acquireIncrement"><value>${hibernate.c3p0.acquire_increment} </value></property>     </bean> public class MyConfigurer extends PropertyPlaceholderConfigurer {     @Override     protected void processProperties(             ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException {         System.out.println("MyConfigurer!");         String password = props.getProperty("hibernate.connection.password");         if (password != null && password.length() > 15) {             props.setProperty("hibernate.connection.password", EncryptUtil .decrypt(password));             System.out.println("MyConfigurer done!");   }         super.processProperties(beanFactory, props);            } }

?

?

原文来源:http://www.360doc.com/content/09/1202/15/36589_10207140.shtml#?

热点排行