Spring读取加密属性文件处理

26 篇文章 0 订阅

Spring读取加密属性文件处理

 

引言:Spring框架俨然已经是目前Java WEB项目开发的一个宠儿,更有人将Spring, Struts,和Hibernage称之为Java WEB项目开发的3件利器。Spring的依赖、注入、AOP及和其它框架的很好集成(如:hibername、ibatis、struts等)确实给web项目开发带来了诸多便利性,但是任何一种框架都不能完全满足个性化需求开发,spring亦是如此。现有一个项目是基于spring、struts和ibtatis的,其中数据库连接池使用的是proxool,领导要求将proxool连接池配置文件进行加密,这里有2种解决方法:

1)    扩展ProxoolDataSource,重写getNewConnection方法,对其置相关数据库配置属性时进行解密处理;

2)    扩展Spring读取属性文件文件的类PropertyPlaceholderConfigurer

 

1、  扩展ProxoolDataSource

package *.*;
 
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
 
import org.logicalcobwebs.proxool.ProxoolDataSource;
 
public class ProxoolDataSourceEX extends ProxoolDataSource {
         private Logger errorLog = CommonLogger.getErrorLog(ProxoolDataSourceEX.class);
         private static Properties proxoolProperties = null;
         private static ProxoolDataSource dataSource = null;
         //
         public synchronized Connection getConnection() {
                   try {
                            if (dataSource != null)
                                     return super.getConnection();
                            else
                                     return getNewConnection();
                  } catch (SQLException e) {
//                          errorLog.error("…….", e);
                   }
                   return null;
         }
        
         private synchronized Connection getNewConnection() {
                   if(proxoolProperties==null){
                            InputStream is = Thread.currentThread().getContextClassLoader().
                                     getResourceAsStream("proxool.properties");
                            proxoolProperties = new Properties();
                            try{
                                     proxoolProperties.load(is);
                            }catch(Exception e){
                                     e.printStackTrace();
                            }
                   }
                //属性值的解密(调用相应解密算法,解密)
        //解密后的属性值置入
                   this.setDriver(driver);
                   this.setDriverUrl(url);
                   …
              try {
                     return super.getConnection();
              } catch (SQLException e) {
                     errorLog.error("…", e);
                   }
                   return null;
         }
}

2、  扩展Spring读取属性文件文件的类PropertyPlaceholderConfigurer

1)    spring datasource配置

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
     <!-- ======================================================================== -->
     <!--  DataSource定义。                                                        -->
     <!-- ======================================================================== -->
     <bean id="DBConfigurer"
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
         <property name="locations">
              <list>
                   <value>classpath:proxool.properties</value>
              </list>
         </property>
     </bean>
 
     <bean id="dataSource"
         class="org.logicalcobwebs.proxool.ProxoolDataSource">
         <property name="driver">
              <value>${dev_proxool_driver_class}</value>
         </property>
         <property name="driverUrl">
              <value>${dev_proxool_driver_url}</value>
         </property>
         <property name="user">
              <value>${dev_proxool_user}</value>
         </property>
         <property name="password">
              <value>${dev_proxool_password}</value>
         </property>
         <property name="alias">
              <value>${dev_proxool_alias}</value>
         </property>
         …
     </bean>
     …
</beans>

2)     扩展 PropertyPlaceholderConfigurer ,对其方法 resolvePlaceholder进行重写。

package *.*;
 
import java.util.Properties;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
 
public class PropertyPlaceholderConfigurerEX extends PropertyPlaceholderConfigurer{
     private boolean secutiry = false;
     private Log logger = LogFactory.getLog(PropertyPlaceholderConfigurerEX.class);
     //
     protected String resolvePlaceholder(String placeholder, Properties props) {
         String placeholderValue = props.getProperty(placeholder);
         if(this.secutiry){
              placeholderValue = deEncrypt(placeholderValue);
         }
         return placeholderValue;
     }
     //
     public boolean isSecutiry() {
         return secutiry;
     }
     public void setSecutiry(boolean secutiry) {
         this.secutiry = secutiry;
     }
    
     private String deEncrypt(String miwen){
          return 解密后的字串;
     }
}

3)     修改上述的datasource配置

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
     <!-- ======================================================================== -->
     <!--  DataSource定义。                                                        -->
     <!-- ======================================================================== -->
     <bean id="DBConfigurer"
     class="*.*.PropertyPlaceholderConfigurerEX">
         <property name="locations">
              <list>
                   <value>classpath:proxool.properties</value>
              </list>
         </property>
         <!—security为false,则对属性文件的属性值不进行解密处理,为true,则进行解密-->
       <property name="secutiry">
           <value>false</value>
       </property>
        <!—扩展PropertyPlaceholderConfigurerEX,最好使用解密算法也可在此处配置-->
     </bean>
    同1)datasource配置




转载地址:http://blog.csdn.net/chuangxin/article/details/5039242

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值