注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

proxool数据库连接池配置文件中对用户和密码进行加密处理(转)  

2012-12-11 18:32:49|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

proxool是个很好的开源连接池。但配置文件中的用户和密码却是明文存储的,如果对系统安全有较高的要求,使用时就麻烦了。昨天下了Proxool 0.9.1的源码,研究了下,做了些小小的改动,现在proxool配置文件中用户和密码可以使用密文存储了,同时明文的也可以正常使用。解密功能部分做成了接口,可以用自己的算法来实现,很方便。

 

先上配置文件proxool.xml

Xml代码 
  1.         <driver-properties>     
  2.             <!--加密后的用户名和密码-->  
  3.             <property name="user" value="da33e8657877280c32683ae317ef78e1"/>     
  4.             <property name="password" value="3defde98af47835a74537600eebe78f2"/>     

 

proxool.properties配置文件:

Properties代码 
  1. jdbc-0.proxool.alias=property-test  
  2. jdbc-0.encrypt=cn.bq.tools.DecUtil  
  3. jdbc-0.proxool.driver-url=jdbc:sqlserver://127.0.0.1:1433;databaseName=xxxx  
  4. jdbc-0.proxool.driver-class=com.microsoft.jdbc.sqlserver.SQLServerDriver  
  5. jdbc-0.user=da33e8657877280c32683ae317ef78e1  
  6. jdbc-0.password=3defde98af47835a74537600eebe78f2  

 

 下面是修改的类:

ProxoolConstants.java

Java代码 
  1. /* 
  2.  * This software is released under a licence similar to the Apache Software Licence. 
  3.  * See org.logicalcobwebs.proxool.package.html for details. 
  4.  * The latest version is available at http://proxool.sourceforge.net 
  5.  */  
  6. package org.logicalcobwebs.proxool;  
  7.   
  8. /** 
  9.  * All constants here please. 
  10.  * 
  11.  * @version $Revision: 1.21 $, $Date: 2004/06/02 20:39:17 $ 
  12.  * @author billhorsman 
  13.  * @author $Author: billhorsman $ (current maintainer) 
  14.  */  
  15. public interface ProxoolConstants {  
  16.   
  17.     public final String PROXOOL = "proxool";  
  18.   
  19.     /** 
  20.      * The namespace uri associated with namepace aware Proxool xml configurations.<br> 
  21.      * Value: The latest version is available at http://proxool.sourceforge.net/xml-namespace 
  22.      */  
  23.     public final String PROXOOL_XML_NAMESPACE_URI = "The latest version is available at http://proxool.sourceforge.net/xml-namespace";  
  24.   
  25.     public final String ALIAS_DELIMITER = ".";  
  26.   
  27.     public final String PROPERTY_PREFIX = PROXOOL + ".";  
  28.   
  29.     public final String URL_DELIMITER = ":";  
  30.       
  31.     /** 用户名和密码是否加密,对应值为解密的class*/  
  32.     public final String USER_PASSWORD_ENCRYPT = "encrypt";  
  33.   
  34.     /** Standard JDBC property */  
  35.     public final String USER_PROPERTY = "user";  
  36.   
  37.     /** Standard JDBC property */  
  38.     public final String PASSWORD_PROPERTY = "password";  
  39.   
  40.     /** Used to build up URL */  
  41.     public final String ALIAS_PROPERTY = PROPERTY_PREFIX + "alias";  
  42.   
  43.     /** Instead of defining the driver in the url you can also use this property */  
  44.     public final String DELEGATE_DRIVER = "driver";  
  45.   
  46.     /** @see ProxoolDriver#getPropertyInfo */  
  47.      public final String DELEGATE_DRIVER_PROPERTY = PROPERTY_PREFIX + DELEGATE_DRIVER;  
  48.   
  49.     /** @see #HOUSE_KEEPING_SLEEP_TIME_PROPERTY */  
  50.     public final String DELEGATE_URL = "url";  
  51.   
  52.     /** @see ProxoolDriver#getPropertyInfo */  
  53.      public final String DELEGATE_URL_PROPERTY = PROPERTY_PREFIX + DELEGATE_URL;  
  54.   
  55.     /** @see #HOUSE_KEEPING_SLEEP_TIME_PROPERTY */  
  56.     public final String HOUSE_KEEPING_SLEEP_TIME = "house-keeping-sleep-time";  
  57.   
  58.     /** @see ProxoolDriver#getPropertyInfo */  
  59.      public final String HOUSE_KEEPING_SLEEP_TIME_PROPERTY = PROPERTY_PREFIX + HOUSE_KEEPING_SLEEP_TIME;  
  60.   
  61.     /** @see #HOUSE_KEEPING_TEST_SQL_PROPERTY */  
  62.     public final String HOUSE_KEEPING_TEST_SQL = "house-keeping-test-sql";  
  63.   
  64.     /** @see ProxoolDriver#getPropertyInfo */  
  65.     public final String HOUSE_KEEPING_TEST_SQL_PROPERTY = PROPERTY_PREFIX + HOUSE_KEEPING_TEST_SQL;  
  66.   
  67.     /** @see #TEST_BEFORE_USE_PROPERTY */  
  68.     public final String TEST_BEFORE_USE = "test-before-use";  
  69.   
  70.     /** @see ProxoolDriver#getPropertyInfo */  
  71.     public final String TEST_BEFORE_USE_PROPERTY = PROPERTY_PREFIX + TEST_BEFORE_USE;  
  72.   
  73.     /** @see #TEST_AFTER_USE_PROPERTY */  
  74.     public final String TEST_AFTER_USE = "test-after-use";  
  75.   
  76.     /** @see ProxoolDriver#getPropertyInfo */  
  77.     public final String TEST_AFTER_USE_PROPERTY = PROPERTY_PREFIX + TEST_AFTER_USE;  
  78.   
  79.     /** @see #MAXIMUM_CONNECTION_COUNT_PROPERTY */  
  80.     public final String MAXIMUM_CONNECTION_COUNT = "maximum-connection-count";  
  81.   
  82.     /** @see ProxoolDriver#getPropertyInfo */  
  83.     public final String MAXIMUM_CONNECTION_COUNT_PROPERTY = PROPERTY_PREFIX + MAXIMUM_CONNECTION_COUNT;  
  84.   
  85.     /** @see #MAXIMUM_CONNECTION_LIFETIME_PROPERTY */  
  86.     public final String MAXIMUM_CONNECTION_LIFETIME = "maximum-connection-lifetime";  
  87.   
  88.     /** @see ProxoolDriver#getPropertyInfo */  
  89.     public final String MAXIMUM_CONNECTION_LIFETIME_PROPERTY = PROPERTY_PREFIX + MAXIMUM_CONNECTION_LIFETIME;  
  90.   
  91.     /** 
  92.      * @deprecated use {@link #SIMULTANEOUS_BUILD_THROTTLE} instead 
  93.      */  
  94.     public final String MAXIMUM_NEW_CONNECTIONS = "maximum-new-connections";  
  95.   
  96.     /** 
  97.      * @deprecated use {@link #SIMULTANEOUS_BUILD_THROTTLE_PROPERTY} instead 
  98.      */  
  99.     public final String MAXIMUM_NEW_CONNECTIONS_PROPERTY = PROPERTY_PREFIX + MAXIMUM_NEW_CONNECTIONS;  
  100.   
  101.     /** @see #SIMULTANEOUS_BUILD_THROTTLE_PROPERTY*/  
  102.     public final String SIMULTANEOUS_BUILD_THROTTLE = "simultaneous-build-throttle";  
  103.   
  104.     /** @see ProxoolDriver#getPropertyInfo */  
  105.     public final String SIMULTANEOUS_BUILD_THROTTLE_PROPERTY = PROPERTY_PREFIX + SIMULTANEOUS_BUILD_THROTTLE;  
  106.   
  107.     /** @see #MINIMUM_CONNECTION_COUNT_PROPERTY */  
  108.     public final String MINIMUM_CONNECTION_COUNT = "minimum-connection-count";  
  109.   
  110.     /** @see ProxoolDriver#getPropertyInfo */  
  111.     public final String MINIMUM_CONNECTION_COUNT_PROPERTY = PROPERTY_PREFIX + MINIMUM_CONNECTION_COUNT;  
  112.   
  113.     /** @see #PROTOTYPE_COUNT_PROPERTY */  
  114.     public final String PROTOTYPE_COUNT = "prototype-count";  
  115.   
  116.     /** @see ProxoolDriver#getPropertyInfo */  
  117.     public final String PROTOTYPE_COUNT_PROPERTY = PROPERTY_PREFIX + PROTOTYPE_COUNT;  
  118.   
  119.     /** @see #RECENTLY_STARTED_THRESHOLD_PROPERTY */  
  120.     public final String RECENTLY_STARTED_THRESHOLD = "recently-started-threshold";  
  121.   
  122.     /** @see ProxoolDriver#getPropertyInfo */  
  123.     public final String RECENTLY_STARTED_THRESHOLD_PROPERTY = PROPERTY_PREFIX + RECENTLY_STARTED_THRESHOLD;  
  124.   
  125.     /** @see #OVERLOAD_WITHOUT_REFUSAL_LIFETIME_PROPERTY */  
  126.     public final String OVERLOAD_WITHOUT_REFUSAL_LIFETIME = "overload-without-refusal-lifetime";  
  127.   
  128.     /** @see ProxoolDriver#getPropertyInfo */  
  129.     public final String OVERLOAD_WITHOUT_REFUSAL_LIFETIME_PROPERTY = PROPERTY_PREFIX + OVERLOAD_WITHOUT_REFUSAL_LIFETIME;  
  130.   
  131.     /** @see #MAXIMUM_ACTIVE_TIME_PROPERTY */  
  132.     public final String MAXIMUM_ACTIVE_TIME = "maximum-active-time";  
  133.   
  134.     /** @see ProxoolDriver#getPropertyInfo */  
  135.     public final String MAXIMUM_ACTIVE_TIME_PROPERTY = PROPERTY_PREFIX + MAXIMUM_ACTIVE_TIME;  
  136.   
  137.     /** @see #INJECTABLE_CONNECTION_INTERFACE_NAME_PROPERTY */  
  138.     public final String INJECTABLE_CONNECTION_INTERFACE_NAME = "injectable-connection-interface";  
  139.   
  140.     /** @see ProxoolDriver#getPropertyInfo */  
  141.     public final String INJECTABLE_CONNECTION_INTERFACE_NAME_PROPERTY = PROPERTY_PREFIX + INJECTABLE_CONNECTION_INTERFACE_NAME;  
  142.   
  143.     /** @see #INJECTABLE_STATEMENT_INTERFACE_NAME_PROPERTY */  
  144.     public final String INJECTABLE_STATEMENT_INTERFACE_NAME = "injectable-statement-interface";  
  145.   
  146.     /** @see ProxoolDriver#getPropertyInfo */  
  147.     public final String INJECTABLE_STATEMENT_INTERFACE_NAME_PROPERTY = PROPERTY_PREFIX + INJECTABLE_STATEMENT_INTERFACE_NAME;  
  148.   
  149.     /** @see #INJECTABLE_PREPARED_STATEMENT_INTERFACE_NAME_PROPERTY */  
  150.     public final String INJECTABLE_PREPARED_STATEMENT_INTERFACE_NAME = "injectable-prepared-statement-interface";  
  151.   
  152.     /** @see ProxoolDriver#getPropertyInfo */  
  153.     public final String INJECTABLE_PREPARED_STATEMENT_INTERFACE_NAME_PROPERTY = PROPERTY_PREFIX + INJECTABLE_PREPARED_STATEMENT_INTERFACE_NAME;  
  154.   
  155.     /** @see #INJECTABLE_CALLABLE_STATEMENT_INTERFACE_NAME_PROPERTY */  
  156.     public final String INJECTABLE_CALLABLE_STATEMENT_INTERFACE_NAME = "injectable-callable-statement-interface";  
  157.   
  158.     /** @see ProxoolDriver#getPropertyInfo */  
  159.     public final String INJECTABLE_CALLABLE_STATEMENT_INTERFACE_NAME_PROPERTY = PROPERTY_PREFIX + INJECTABLE_CALLABLE_STATEMENT_INTERFACE_NAME;  
  160.   
  161.     /** 
  162.      * @deprecated use {@link #VERBOSE_PROPERTY verbose} instead. 
  163.      */  
  164.     public final String DEBUG_LEVEL_PROPERTY = PROPERTY_PREFIX + "debug-level";  

 

 

解密接口类Decryptool.java

Java代码
  1. /* 
  2.  * To change this template, choose Tools | Templates 
  3.  * and open the template in the editor. 
  4.  */  
  5. package org.logicalcobwebs.proxool.util;  
  6.   
  7. /** 
  8.  * 
  9.  * @author zhappy 
  10.  */  
  11. public interface Decryptool {  
  12.   
  13.     /** 
  14.      * 解密字符串 
  15.      * @param content 密文 
  16.      * @return 明文 
  17.      */  
  18.     public String decrypt(String content);  
  19.       
  20. }  

 

 

 

PropertyConfigurator.java

Java代码 
  1. /* 
  2.  * This software is released under a licence similar to the Apache Software Licence. 
  3.  * See org.logicalcobwebs.proxool.package.html for details. 
  4.  * The latest version is available at http://proxool.sourceforge.net 
  5.  */  
  6. package org.logicalcobwebs.proxool.configuration;  
  7.   
  8. import java.io.FileInputStream;  
  9. import java.io.IOException;  
  10. import java.util.HashMap;  
  11. import java.util.Iterator;  
  12. import java.util.Map;  
  13. import java.util.Properties;  
  14. import org.apache.commons.logging.Log;  
  15. import org.apache.commons.logging.LogFactory;  
  16. import org.logicalcobwebs.proxool.ProxoolConstants;  
  17. import org.logicalcobwebs.proxool.ProxoolException;  
  18. import org.logicalcobwebs.proxool.ProxoolFacade;  


  19. public class PropertyConfigurator {  
  20.   
  21.     private static final Log LOG = LogFactory.getLog(PropertyConfigurator.class);  
  22.     protected static final String PREFIX = "jdbc";  
  23.     private static final String DOT = ".";  
  24.     private static final String EXAMPLE_FORMAT = PREFIX + "*" + DOT + "*";  
  25.   
  26.     /** 
  27.      * Configure proxool with the given properties file. 
  28.      * 
  29.      * @param filename the filename of the properties file. 
  30.      * @throws ProxoolException if the configuration fails. 
  31.      */  
  32.     public static void configure(String filename) throws ProxoolException {  
  33.         Properties properties = new Properties();  
  34.         try {  
  35.             properties.load(new FileInputStream(filename));  
  36.         } catch (IOException e) {  
  37.             throw new ProxoolException("Couldn't load property file " + filename);  
  38.         }  
  39.         configure(properties);  
  40.     }  
  41.   
  42.     /** 
  43.      * Configure proxool with the given properties. 
  44.      * 
  45.      * @param properties the properties instance to use. 
  46.      * @throws ProxoolException if the configuration fails. 
  47.      */  
  48.     public static void configure(Properties properties) throws ProxoolException {  
  49.         final Map propertiesMap = new HashMap();  
  50.         final Iterator allPropertyKeysIterator = properties.keySet().iterator();  
  51.         Properties proxoolProperties = null;  
  52.   
  53.         while (allPropertyKeysIterator.hasNext()) {  
  54.             String key = (String) allPropertyKeysIterator.next();  
  55.             String value = properties.getProperty(key);  
  56.   
  57.             if (key.startsWith(PREFIX)) {  
  58.                 int a = key.indexOf(DOT);  
  59.                 if (a == -1) {  
  60.                     throw new ProxoolException("Property " + key + " must be of the format " + EXAMPLE_FORMAT);  
  61.                 }  
  62.                 final String tag = key.substring(0, a);  
  63.                 final String name = key.substring(a + 1);  
  64.                 proxoolProperties = (Properties) propertiesMap.get(tag);  
  65.                 if (proxoolProperties == null) {  
  66.                     proxoolProperties = new Properties();  
  67.                     propertiesMap.put(tag, proxoolProperties);  
  68.                 }  
  69.                 proxoolProperties.put(name, value);  
  70.             }  
  71.         }  
  72.   
  73.         final Iterator tags = propertiesMap.keySet().iterator();  
  74.         while (tags.hasNext()) {  
  75.             proxoolProperties = (Properties) propertiesMap.get(tags.next());  
  76.   
  77.             final String ec = proxoolProperties.getProperty(ProxoolConstants.USER_PASSWORD_ENCRYPT);  
  78.             if (ec != null) {//如果在配置文件中存在解密项就先动态加载解密类,然后对用户名和密码进行解密  
  79.                 Decryptool dec = null;  
  80.                 try {  
  81.                     Class c = Class.forName(ec);  
  82.                     Object o = c.newInstance();  
  83.                     dec = (Decryptool) o;  
  84.                 } catch (Exception e) {  
  85.                     LOG.error("new Class [" + ec + "] fail!", e);  
  86.                 }  
  87.                 final String user = proxoolProperties.getProperty(ProxoolConstants.USER_PROPERTY);//取原值  
  88.                 proxoolProperties.setProperty(ProxoolConstants.USER_PROPERTY, dec.decrypt(user));//解密并设置  
  89.                 final String password = proxoolProperties.getProperty(ProxoolConstants.PASSWORD_PROPERTY);//取原值  
  90.                 proxoolProperties.setProperty(ProxoolConstants.PASSWORD_PROPERTY, dec.decrypt(password));//解密并设置  
  91.             }  
  92.             // make sure that required propeties are defined  
  93.             // and build the url  
  94.             // Check that we have defined the minimum information  
  95.             final String driverClass = proxoolProperties.getProperty(ProxoolConstants.DRIVER_CLASS_PROPERTY);  
  96.             final String driverUrl = proxoolProperties.getProperty(ProxoolConstants.DRIVER_URL_PROPERTY);  
  97.             if (driverClass == null || driverUrl == null) {  
  98.                 throw new ProxoolException("You must define the " + ProxoolConstants.DRIVER_CLASS_PROPERTY + " and the "  
  99.                         + ProxoolConstants.DRIVER_URL_PROPERTY + ".");  
  100.             }  
  101.             final String alias = proxoolProperties.getProperty(ProxoolConstants.ALIAS_PROPERTY);  
  102.   
  103.             // Build the URL; optionally defining a name  
  104.             StringBuffer url = new StringBuffer();  
  105.             url.append("proxool");  
  106.             if (alias != null) {  
  107.                 url.append(ProxoolConstants.ALIAS_DELIMITER);  
  108.                 url.append(alias);  
  109.                 proxoolProperties.remove(ProxoolConstants.ALIAS_PROPERTY);  
  110.             }  
  111.             url.append(ProxoolConstants.URL_DELIMITER);  
  112.             url.append(driverClass);  
  113.             proxoolProperties.remove(ProxoolConstants.DRIVER_CLASS_PROPERTY);  
  114.             url.append(ProxoolConstants.URL_DELIMITER);  
  115.             url.append(driverUrl);  
  116.             proxoolProperties.remove(ProxoolConstants.DRIVER_URL_PROPERTY);  
  117.             if (LOG.isDebugEnabled()) {  
  118.                 LOG.debug("Created url: " + url);  
  119.             }  
  120.   
  121.             ProxoolFacade.registerConnectionPool(url.toString(), proxoolProperties);  
  122.         }  
  123.     }  
  124. }  
  125.   

 

 

 

XMLConfigurator.java

Java代码 
  1. /* 
  2.  * This software is released under a licence similar to the Apache Software Licence. 
  3.  * See org.logicalcobwebs.proxool.package.html for details. 
  4.  * The latest version is available at http://proxool.sourceforge.net 
  5.  */  
  6. package org.logicalcobwebs.proxool.configuration;  
  7.   
  8. import java.util.Iterator;  
  9. import java.util.Properties;  
  10. import org.apache.commons.logging.Log;  
  11. import org.apache.commons.logging.LogFactory;  
  12. import org.logicalcobwebs.proxool.ProxoolConstants;  
  13. import org.logicalcobwebs.proxool.ProxoolException;  
  14. import org.logicalcobwebs.proxool.ProxoolFacade;  
  15. import org.logicalcobwebs.proxool.util.Decryptool;  
  16. import org.xml.sax.Attributes;  
  17. import org.xml.sax.SAXException;  
  18. import org.xml.sax.SAXParseException;  
  19. import org.xml.sax.helpers.DefaultHandler;  
  20.   
  21. public class XMLConfigurator extends DefaultHandler {  
  22.   
  23.     private static final Log LOG = LogFactory.getLog(XMLConfigurator.class);  
  24.     private StringBuffer content = new StringBuffer();  
  25.     private String poolName;  
  26.     private String driverClass;  
  27.     private String driverUrl;  
  28.     private Properties properties = new Properties();  
  29.     private static final String PROXOOL = "proxool";  
  30.     private static final String DRIVER_PROPERTIES = "driver-properties";  
  31.     private static final String PROPERTY = "property";  
  32.     private static final String NAME = "name";  
  33.     private static final String VALUE = "value";  
  34.     private boolean insideDelegateProperties;  
  35.     private boolean insideProxool;  
  36.   
  37.     /** 
  38.      * @see org.xml.sax.ContentHandler#startElement 
  39.      */  
  40.     @Override  
  41.     public void startElement(String uri, String lname, String qname, Attributes attributes) throws SAXException {  
  42.         content.setLength(0);  
  43.   
  44.         if (!namespaceOk(uri)) {  
  45.             return;  
  46.         }  
  47.   
  48.         final String elementName = getElementName(uri, lname, qname);  
  49.   
  50.         if (elementName.equals(PROXOOL)) {  
  51.             if (insideProxool) {  
  52.                 throw new SAXException("A <" + PROXOOL + "> element can't contain another <" + PROXOOL + "> element.");  
  53.             }  
  54.             insideProxool = true;  
  55.             properties.clear();  
  56.             driverClass = null;  
  57.             driverUrl = null;  
  58.         }  
  59.   
  60.         if (insideProxool) {  
  61.             if (elementName.equals(DRIVER_PROPERTIES)) {  
  62.                 insideDelegateProperties = true;  
  63.             } else if (insideDelegateProperties) {  
  64.                 if (elementName.equals(PROPERTY)) {  
  65.                     setDriverProperty(attributes);  
  66.                 }  
  67.             }  
  68.         }  
  69.     }  
  70.   
  71.     /** 
  72.      * @see org.xml.sax.ContentHandler#characters 
  73.      */  
  74.     @Override  
  75.     public void characters(char[] chars, int start, int length) throws SAXException {  
  76.         if (insideProxool) {  
  77.             content.append(chars, start, length);  
  78.         }  
  79.     }  
  80.   
  81.     /** 
  82.      * @see org.xml.sax.ContentHandler#endElement 
  83.      */  
  84.     @Override  
  85.     public void endElement(String uri, String lname, String qname) throws SAXException {  
  86.         if (!namespaceOk(uri)) {  
  87.             return;  
  88.         }  
  89.   
  90.         final String elementName = getElementName(uri, lname, qname);  
  91.   
  92.         // Are we ending a proxool configuration section?  
  93.         if (elementName.equals(PROXOOL)) {  
  94.   
  95.             // Check that we have defined the minimum information  
  96.             if (driverClass == null || driverUrl == null) {  
  97.                 throw new SAXException("You must define the "   
  98.                         + ProxoolConstants.DRIVER_CLASS + " and the " + ProxoolConstants.DRIVER_URL + ".");  
  99.             }  
  100.   
  101.             // Build the URL; optinally defining a name  
  102.             StringBuffer url = new StringBuffer();  
  103.             url.append("proxool");  
  104.             if (poolName != null) {  
  105.                 url.append(ProxoolConstants.ALIAS_DELIMITER);  
  106.                 url.append(poolName);  
  107.             }  
  108.             url.append(ProxoolConstants.URL_DELIMITER);  
  109.             url.append(driverClass);  
  110.             url.append(ProxoolConstants.URL_DELIMITER);  
  111.             url.append(driverUrl);  
  112.             if (LOG.isDebugEnabled()) {  
  113.                 LOG.debug("Created url: " + url);  
  114.             }  
  115.   
  116.             // Register the pool  
  117.             try {  
  118.                 final String ec = properties.getProperty(ProxoolConstants.PROPERTY_PREFIX   
  119.                         + ProxoolConstants.USER_PASSWORD_ENCRYPT);  
  120.                 if (ec != null) {//判断配置文件中是否有解密class的配置,如果有则动态加载  
  121.                     Decryptool dec = null;  
  122.                     try {  
  123.                         Class c = Class.forName(ec);  
  124.                         Object o = c.newInstance();  
  125.                         dec = (Decryptool) o;  
  126.                     } catch (Exception e) {  
  127.                         LOG.error("new Class [" + ec + "] fail!", e);  
  128.                     }  
  129.                     final String user = properties.getProperty(ProxoolConstants.USER_PROPERTY);//取原值  
  130.                     properties.setProperty(ProxoolConstants.USER_PROPERTY, dec.decrypt(user));//解密并设置  
  131.                     final String password = properties.getProperty(ProxoolConstants.PASSWORD_PROPERTY);//取原值  
  132.                     properties.setProperty(ProxoolConstants.PASSWORD_PROPERTY, dec.decrypt(password));//解密并设置  
  133.                 }  
  134.                 ProxoolFacade.registerConnectionPool(url.toString(), properties);  
  135.             } catch (ProxoolException e) {  
  136.                 throw new SAXException(e);  
  137.             }  
  138.   
  139.             // This ensures we ignore remaining XML until we come across another  
  140.             // <proxool> element.  
  141.             insideProxool = false;  
  142.         }  
  143.   
  144.         if (insideProxool && !elementName.equals(PROXOOL)) {  
  145.             if (elementName.equals(DRIVER_PROPERTIES)) {  
  146.                 insideDelegateProperties = false;  
  147.             } else if (!insideDelegateProperties) {  
  148.                 setProxoolProperty(elementName, content.toString().trim());  
  149.             }  
  150.         }  
  151.     }  
  152.   
  153.     private void setProxoolProperty(String localName, String value) {  
  154.         if (localName.equals(ProxoolConstants.ALIAS)) {  
  155.             poolName = value;  
  156.         } else if (localName.equals(ProxoolConstants.DRIVER_CLASS)) {  
  157.             driverClass = value;  
  158.         } else if (localName.equals(ProxoolConstants.DRIVER_URL)) {  
  159.             driverUrl = value;  
  160.         } else {  
  161.             if (LOG.isDebugEnabled()) {  
  162.                 LOG.debug("Setting property '" + ProxoolConstants.PROPERTY_PREFIX + localName + "' to value '" + value + "'.");  
  163.             }  
  164.             properties.put(ProxoolConstants.PROPERTY_PREFIX + localName, value);  
  165.         }  
  166.     }  
  167.   
  168.     private void setDriverProperty(Attributes attributes) throws SAXException {  
  169.         final String name = attributes.getValue(NAME);  
  170.         final String value = attributes.getValue(VALUE);  
  171.         if (name == null || name.length() < 1 || value == null) {  
  172.             throw new SAXException("Name or value attribute missing from property element."  
  173.                     + "Name: '" + name + "' Value: '" + value + "'.");  
  174.         }  
  175.         if (LOG.isDebugEnabled()) {  
  176.             if (name.toLowerCase().indexOf("password") > -1) {  
  177.                 LOG.debug("Adding driver property: " + name + "=" + "*******");  
  178.             } else {  
  179.                 LOG.debug("Adding driver property: " + name + "=" + value);  
  180.             }  
  181.         }  
  182.         properties.put(name, value);  
  183.     }  
  184.   
  185.     /** 
  186.      * @see org.xml.sax.ErrorHandler#warning(SAXParseException) 
  187.      */  
  188.     @Override  
  189.     public void warning(SAXParseException e) throws SAXException {  
  190.         // Just debug-log the warning. We'll probably survive.  
  191.         LOG.debug("The saxparser reported a warning.", e);  
  192.     }  
  193.   
  194.     /** 
  195.      * @see org.xml.sax.ErrorHandler#error(SAXParseException) 
  196.      */  
  197.     @Override  
  198.     public void error(SAXParseException e) throws SAXException {  
  199.         // On error we rethrow the exception.  
  200.         // This should cause the parser stop and an exeption be thrown back to the client.  
  201.         throw e;  
  202.     }  
  203.   
  204.     /** 
  205.      * @see org.xml.sax.ErrorHandler#fatalError(SAXParseException) 
  206.      */  
  207.     @Override  
  208.     public void fatalError(SAXParseException e) throws SAXException {  
  209.         // On fatal error we rethrow the exception.  
  210.         // This should cause the parser stop and an exeption be thrown back to the client.  
  211.         throw e;  
  212.     }  
  213.   
  214.     // If no namespace use qname, else use lname.  
  215.     private String getElementName(String uri, String lname, String qname) {  
  216.         if (uri == null || "".equals(uri)) {  
  217.             return qname;  
  218.         } else {  
  219.             return lname;  
  220.         }  
  221.     }  
  222.   
  223.     private boolean namespaceOk(String uri) {  
  224.         return uri == null || uri.length() == 0 || uri.equals(ProxoolConstants.PROXOOL_XML_NAMESPACE_URI);  
  225.     }  
  226. }  

 

 

把上面这几个类编译后,添加、替换原包中的类就可以了。使用上跟原来没有区别。

注意:如果配置使用了解密,就必须先实现接口Decryptool,并在配置文件中设置正确的类路径

接口Decryptool的简单实现:

DecUtil.java

Java代码 
  1. /* 
  2.  * To change this template, choose Tools | Templates 
  3.  * and open the template in the editor. 
  4.  */  
  5. package cn.bq.tools;  
  6.   
  7. import java.io.IOException;  
  8. import java.util.logging.Level;  
  9. import java.util.logging.Logger;  
  10. import org.logicalcobwebs.proxool.util.Decryptool;  
  11. import sun.misc.BASE64Decoder;  
  12. import sun.misc.BASE64Encoder;  
  13.   
  14. /** 
  15.  * 
  16.  * @author zhappy 
  17.  */  
  18. public class DecUtil implements Decryptool {  
  19.   
  20.     @Override  
  21.     public String decrypt(String string) {  
  22.         BASE64Decoder decode = new BASE64Decoder();  
  23.         String s = null;  
  24.         try {  
  25.             byte[] b = decode.decodeBuffer(string);  
  26.             s = new String(b);  
  27.         } catch (IOException ex) {  
  28.             Logger.getLogger(DecUtil.class.getName()).log(Level.SEVERE, null, ex);  
  29.         }  
  30.         return s;  
  31.     }  
  32.   
  33.       
  34.     public String encrypt(String string) {  
  35.         BASE64Encoder encode = new BASE64Encoder();  
  36.         return encode.encode(string.getBytes());  
  37.     }  
  38.       
  39.     public static void main(String[] args) {  
  40.         DecUtil dec = new DecUtil();  
  41.         String str = "password";  
  42.         System.out.println("未加密前:" + str);  
  43.         String _str = dec.encrypt(str);  
  44.         System.out.println("加密后:" + _str);  
  45.         System.out.println("加密字符串[" + _str + "]解密后:" + dec.decrypt(_str));  
  46.     }  
  47.       
  48. }  

 

xml配置文件的

Java代码 
  1. JAXPConfigurator.configure("src/java-test/org/logicalcobwebs/proxool/configuration/test-no-ns.xml"false);  
  2. ……  
  3. connection = DriverManager.getConnection("proxool.xml-test");  

 

properties 配置文件的

Java代码 
  1. PropertyConfigurator.configure("src/java-test/org/logicalcobwebs/proxool/configuration/test.properties");   
  2. ……  
  3. connection = DriverManager.getConnection("proxool.property-test");  
  评论这张
 
阅读(1557)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016