引言: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配置

Spring读取加密属性文件处理--待整理的更多相关文章

  1. Spring读取加密属性文件处理

    引言:Spring框架俨然已经是目前Java WEB项目开发的一个宠儿,更有人将Spring, Struts,和Hibernage称之为Java WEB项目开发的3件利器.Spring的依赖.注入.A ...

  2. Java学习笔记——JDBC读取properties属性文件

    Java 中的 properties 文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件. 文件的内容是格式是"键=值"(key-valu ...

  3. spring读取加密配置信息

    描述&背景Spring框架配置数据库等连接等属性时,都是交由 PopertyPlaceholderConfigurer进行读取.properties文件的,但如果项目不允许在配置文件中明文保存 ...

  4. Spring读取外部属性-properties

    概述 在Spring中处理外部值最简常用的方法就是外部创建name.properties文件,并在其中声明变量值,供Java进行读取.比如数据源信息配置,Java固定属性位置等.读取的方式一般由三种: ...

  5. spring 使用外部属性文件

    一.PropertyPlaceholderConfigurer spring提供的PropertyPlaceholderConfigurer实现类能够使Bean在配置时引用外部属性文件. Proper ...

  6. 8、Spring+Struts2+MyBaits(Spring注解+jdbc属性文件+log4j属性文件)

    一.注解理论 使用注解来构造IoC容器 用注解来向Spring容器注册Bean.需要在applicationContext.xml中注册<context:component-scan base- ...

  7. Spring中使用属性文件properties的两种方式

    实际项目中,通常将可配置的参数放到属性文件中,例如数据库连接信息.redis连接信息等,便于统一管理.然后通过IoC框架spring将其加载到上下文中,使得程序可以直接使用. 创建mysql.prop ...

  8. Spring 使用外部属性文件配置

    1.Spring提供了一个PropertyPlaceholderConfigurer的BeanFactory后置处理器,这个处理器允许用户将Bean的配置的部分内容 移到属性文件中.可以在Bean配置 ...

  9. Spring使用外部属性文件

    一.在 Spring Config 文件中配置 Bean 时,有时候需要在 Bean 的配置里添加 系统部署的细节信息, 如文件路径,数据源配置信息.而这些部署细节实际上需要在配置文件外部来定义. 二 ...

随机推荐

  1. Android中怎样控制LogCat的自己定义输出

    在Android开发中,LogCat是一个非常重要的调试工具,能够输出非常多关于项目或者手机的信息. 可是正是因为LogCat功能的过于强大,输出的信息量也是极为庞大的,那么我们就须要通过一定的方式依 ...

  2. 【BZOJ2510】弱题 期望DP+循环矩阵乘法

    [BZOJ2510]弱题 Description 有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球 ...

  3. 关于mongodb创建索引的一些经验总结(转)

    查看语句执行计划: explain() 在mongodb3+版本后输出格式发生改变: 详情参见:https://docs.mongodb.com/v3.0/reference/method/curso ...

  4. ridge regression 无惩罚,导致预测结果空间过大而无实用价值

    [ biased regression methods to reduce variance---通过偏回归来减小方差] https://onlinecourses.science.psu.edu/s ...

  5. 【题解】Coins(二进制拆分+bitset)

    [题解]Coins(二进制拆分+bitset) [vj] 俗话说得好,bitset大法吼啊 这道题要不是他多组数据卡死了我复杂度算出来等于九千多万的选手我还不会想这种好办法233 考虑转移的实质是怎样 ...

  6. cron表达式(转)

    原文地址:http://www.cnblogs.com/linjiqin/archive/2013/07/08/3178452.html Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或 ...

  7. debian7配置

    输入法: apt-get install ibus ibus-pinyin 并执行ibus-setup进行配置,首选项->输入法->中文,然后按添加按钮即可. 软件开发基本软件:apt-g ...

  8. Android系统Gps分析(一)【转】

    本文转载自:http://blog.csdn.net/xnwyd/article/details/7198728 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   1 G ...

  9. 51nod 80分算法题

    1537:见前几篇. 1627:题意:给定n,m的网格(10^5),初始状态为(1,1),你每次可以瞬移到右下方(不可以同行同列逗留)任何一个方格里,求移动到n,m的方案数. 一句话题解:首先很容易想 ...

  10. ios审核过程十大常见被拒问题

    欢迎加入ios马甲包经验交流群,群聊号码:744520623 2018年伊始,苹果并没有因为新年的气氛而对CP们“网开一面”.频繁锁榜.调整排名规则以及关键词覆盖算法……不断抛出的大动作,让CP们叫苦 ...