目标:要加密spring的jdbc配置文件的密码口令。
实现思路:重写加载器的方法,做到偷梁换柱,在真正使用配置之前完成解密。
1、扩展
package com.lavasoft.freamwork.ext.spring;
import com.lavasoft.freamwork.common.ThreeDES;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import java.util.Properties;
/**
* 重写PropertyPlaceholderConfigurer的processProperties方法实现
*
* @author leizhimin 2012-03-14 16:47
*/
public class PropertyPlaceholderConfigurerExt extends PropertyPlaceholderConfigurer{
@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
throws BeansException {
String password = props.getProperty( "jdbc.password");
if (password != null) {
//解密jdbc.password属性值,并重新设置
props.setProperty( "jdbc.password", ThreeDES.getDesString(password));
}
super.processProperties(beanFactory, props);
}
}
import com.lavasoft.freamwork.common.ThreeDES;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import java.util.Properties;
/**
* 重写PropertyPlaceholderConfigurer的processProperties方法实现
*
* @author leizhimin 2012-03-14 16:47
*/
public class PropertyPlaceholderConfigurerExt extends PropertyPlaceholderConfigurer{
@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
throws BeansException {
String password = props.getProperty( "jdbc.password");
if (password != null) {
//解密jdbc.password属性值,并重新设置
props.setProperty( "jdbc.password", ThreeDES.getDesString(password));
}
super.processProperties(beanFactory, props);
}
}
2、配置
<!--
不加密时候使用 -->
<!-- <context:property-placeholder location="classpath:jdbc.properties,classpath:tdmc.properties"/>-->
<!-- 加密时候使用 -->
< bean id ="propertyConfig" class ="com.lavasoft.freamwork.ext.spring.PropertyPlaceholderConfigurerExt" >
< property name ="locations" >
< list >
< value >classpath:jdbc.properties </ value >
< value >classpath:tdmc.properties </ value >
</ list >
</ property >
</ bean >
<!-- <context:property-placeholder location="classpath:jdbc.properties,classpath:tdmc.properties"/>-->
<!-- 加密时候使用 -->
< bean id ="propertyConfig" class ="com.lavasoft.freamwork.ext.spring.PropertyPlaceholderConfigurerExt" >
< property name ="locations" >
< list >
< value >classpath:jdbc.properties </ value >
< value >classpath:tdmc.properties </ value >
</ list >
</ property >
</ bean >
3、jdbc配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://10.87.30.32:3306/tdmc_leizm
jdbc.user=root
#jdbc.password=123456
jdbc.password=tAeE2ib1ILE=
jdbc.url=jdbc:mysql://10.87.30.32:3306/tdmc_leizm
jdbc.user=root
#jdbc.password=123456
jdbc.password=tAeE2ib1ILE=
加密算法就不公开了。
本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/807502,如需转载请自行联系原作者