spring +hibernate对数据库配置信息加解密(DBCP)

来源:互联网 发布:mac ruby安装 编辑:程序博客网 时间:2024/06/07 09:39

前一段时间某银行项目银行方面需要对数据库配置信息加密,做了这几年项目第一次碰到这样的客户,没办法客户的需求就是我们的追求。现在网上搜了一些方法不得要领,最后下了一份源码commons-dbcp源码自己研究,发现解决办法相当简单。废话少说入正题

1.创建一个类Test继承org.apache.commons.dbcp.BasicDataSource

public class Test extends org.apache.commons.dbcp.BasicDataSource{

 

   public static void main(String[] args) {
       /**
        * 遍历父类方法
        */
       for(Method method:new Test().getClass().getMethods())
       {
           System.out.println(method);
       }

   }
   

}

2.重写父类方法 setPassword()   (试用于对数据库密码解密)

package com.fuji.test.junit;

import java.lang.reflect.Method;

import com.fuji.common.encrypt.password.Password;




public class Test extends org.apache.commons.dbcp.BasicDataSource{

   public static void main(String[] args) {
       /**
        * 遍历父类方法
        */
       for(Method method:new Test().getClass().getMethods())
       {
           System.out.println(method);
       }

   }
   /**
    * 重写父类 setPassword()
    */
   public synchronized void setPassword(String password) {
       
       String dePassword=Password.decrypt(password);//将密文password解密成明文password
       
       super.setPassword(dePassword);//解密之后调用父类的setPassword();因为父类放中调用了一个私有变量,重写的方法不能完全代替父类方法
   }
}

3.同理如果要对数据库连接地址和数据库用户名解密重写父类的setUrl()和setUsername()

package com.fuji.test.junit;

import java.lang.reflect.Method;

import com.fuji.common.encrypt.password.Password;




public class Test extends org.apache.commons.dbcp.BasicDataSource{

   public static void main(String[] args) {
       /**
        * 遍历父类方法
        */
       for(Method method:new Test().getClass().getMethods())
       {
           System.out.println(method);
       }

   }
   /**
    * 重写父类 setPassword()
    */
   public synchronized void setPassword(String password) {
       
       String dePassword=Password.decrypt(password);//将密文password解密成明文password
       
       super.setPassword(dePassword);//解密之后调用父类的setPassword();因为父类放中调用了一个私有变量,重写的方法不能完全代替父类方法
   }
   /**
    * 重写父类 setUrl()
    */
   public synchronized void setUrl(String url)
   {
       
       String deUrl=Password.decrypt(password);//将密文Url解密成明文Url
       super.setUrl(deUrl);
   }
   /**
    * 重写父类 setUsername()
    */
   public synchronized void setUsername(String username)
   {
       String deUsername=Password.decrypt(password);//将密文Username解密成明文Username
       super.setUsername(deUsername);
   }
}

4.修改spring数据库配置文件

<bean id="dataSource4test" class="com.fuji.test.junit.Test" destroy-method="close"><!-- 将引用 (org.apache.commons.dbcp.BasicDataSource)换成自己写的类(com.fuji.test.junit.Test) -->
     <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="<7:952;6;5?0>=6;00"/> <!--加密之后的数据库链接地址-->
    <property name="username" value="<44=636?867=<0:>00"/> <!--加密之后的数据库用户名-->
    <property name="password" value="?;=4<;50??;3??2=00"/> <!--加密之后的数据密码-->
  </bean>

OK重启服务器能正常连接数据就大工告成了!别的链接池没有试过,应该也能用同样的方法吧,等有时间了研究一下再和大家分享。另外附一个commons-dbcp-1.2.2源码


0 0
原创粉丝点击