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配置 |
Spring读取加密属性文件处理--待整理的更多相关文章
- Spring读取加密属性文件处理
引言:Spring框架俨然已经是目前Java WEB项目开发的一个宠儿,更有人将Spring, Struts,和Hibernage称之为Java WEB项目开发的3件利器.Spring的依赖.注入.A ...
- Java学习笔记——JDBC读取properties属性文件
Java 中的 properties 文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件. 文件的内容是格式是"键=值"(key-valu ...
- spring读取加密配置信息
描述&背景Spring框架配置数据库等连接等属性时,都是交由 PopertyPlaceholderConfigurer进行读取.properties文件的,但如果项目不允许在配置文件中明文保存 ...
- Spring读取外部属性-properties
概述 在Spring中处理外部值最简常用的方法就是外部创建name.properties文件,并在其中声明变量值,供Java进行读取.比如数据源信息配置,Java固定属性位置等.读取的方式一般由三种: ...
- spring 使用外部属性文件
一.PropertyPlaceholderConfigurer spring提供的PropertyPlaceholderConfigurer实现类能够使Bean在配置时引用外部属性文件. Proper ...
- 8、Spring+Struts2+MyBaits(Spring注解+jdbc属性文件+log4j属性文件)
一.注解理论 使用注解来构造IoC容器 用注解来向Spring容器注册Bean.需要在applicationContext.xml中注册<context:component-scan base- ...
- Spring中使用属性文件properties的两种方式
实际项目中,通常将可配置的参数放到属性文件中,例如数据库连接信息.redis连接信息等,便于统一管理.然后通过IoC框架spring将其加载到上下文中,使得程序可以直接使用. 创建mysql.prop ...
- Spring 使用外部属性文件配置
1.Spring提供了一个PropertyPlaceholderConfigurer的BeanFactory后置处理器,这个处理器允许用户将Bean的配置的部分内容 移到属性文件中.可以在Bean配置 ...
- Spring使用外部属性文件
一.在 Spring Config 文件中配置 Bean 时,有时候需要在 Bean 的配置里添加 系统部署的细节信息, 如文件路径,数据源配置信息.而这些部署细节实际上需要在配置文件外部来定义. 二 ...
随机推荐
- 有一个投篮游戏。球场有p个篮筐,编号为0,1...,p-1。每个篮筐下有个袋子,每个袋子最多装一个篮球。有n个篮球,每个球编号xi 。规则是将数字为xi 的篮球投到xi 除p的余数为编号的袋里。若袋里已有篮球则球弹出游戏结束输出i,否则重复至所有球都投完。输出-1。问游戏最终的输出是什么?
// ConsoleApplication5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<vector> ...
- HDFS中数据节点数据块存储示例
数据块在数据节点上是按照如下方式存储的. 首先是一个存储的根目录/Hadoop/data/dfs/dn,如下图所示: 接着进入current目录,如下图所示: 再进入后续的BP-433072574-1 ...
- Windows系统的Jenkins持续集成环境
Windows系统的Jenkins持续集成环境 如题:本文将介绍如何在Windows环境下运用Jenkins部署持续集成环境.之所以写本文,是因为在最近工作当中,学习使用Jenkins时,确实遇到了一 ...
- CPI和GDP有什么关系
CPI反映消费价格变化情况,是一个相对数.GDP反映国民经济生产总量,是一个绝对数.CPI的变动反映经济运行过程中物价变动情况,是观察通货膨胀程度的重要指标,GDP的变化则反映经济的增长情况.经济增长 ...
- 【ASP.NET】巧用Cookie实战
上篇介绍了究竟什么是Cookie.究竟是干什么用的,这篇博客具体具体的说一下.Cookie究竟怎样用. 首先建立如图所看到的的界面.通过该界面可登录到某个站点.详细要求例如以下: ·在首次登录后,将登 ...
- 兼容性强、简单、成熟、稳定的RTMPClient客户端拉流功能组件EasyRTMPClient
EasyRTMPClient EasyRTMPClient拉流功能组件是EasyDarwin流媒体团队开发.提供和维护的一套非常稳定.易用.支持重连的RTMPClient工具,SDK形式提供,全平台支 ...
- 九度OJ 1027:欧拉回路 (欧拉回路)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2989 解决:1501 题目描述: 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是 ...
- (C)位字段(bit-field)
位字段(bit-field) 在存储空间很宝贵的情况下,有可能需要将多个对象保存在一个机器字中,一种常用的方法是:使用类似于编译器符号表的单个二进制位标志集合,外部强加的数据格式(如设备接口等寄存器) ...
- P3209 [HNOI2010]平面图判定
P3209 [HNOI2010]平面图判定 哈密尔顿环之外的任意一条边,要么连在环内部,要么连在环外部 判断两条边在同一部分会相交,则这两条边必须分开 那么把边看作点连边,跑二分图染色就行 #incl ...
- 无法远程连接阿里云的Mysql
问题描述:昨天使用阿里云安装了Mysql,无法远程连接,排除端口号错误.防火墙.Mysql权限问题后,最后发现是阿里云安全组规则限制问题: 解决方式: 1.访问阿里云控制台,实例-->管理 2. ...