Spring使用占位符可配加密字符串

一个项目肯定会多少有些配置项,例如jdbc的一些配置,Spring的占位符,简化了对配置文件的读取,用起来极其方便。

1、假设你的配置项如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
jdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF8
jdbc.username=user
jdbc.password=password
jdbc.validationQuery=select 1
jdbc.maxActive=20
jdbc.initialSize=1
jdbc.minIdle=1
jdbc.maxWait=60000
jdbc.timeBetweenEvictionRunsMillis=3000
jdbc.minEvictableIdleTimeMillis=300000
jdbc.testWhileIdle=true
jdbc.testOnReturn=false
jdbc.testOnBorrow=false
jdbc.defaultAutoCommit=true

写在配置文件config.properties中
2、你只要在Spring配置文件中配上如下bean

1
2
3
<bean id="propertyConfigurer">
    <property name="location" value="classpath:config.properties"/>
</bean>

3、就可以在spring中自由注入你的配置项了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<bean abstract="true">
    <property name="driverClassName"  value="${jdbc.driverClassName}"/>
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="maxActive" value="${jdbc.maxActive}" />
    <property name="initialSize" value="${jdbc.initialSize}" />
    <property name="maxWait" value="${jdbc.maxWait}" />
    <property name="minIdle" value="${jdbc.minIdle}" />
    <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
    <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
    <property name="validationQuery" value="${jdbc.validationQuery}" />
    <property name="testWhileIdle" value="${jdbc.testWhileIdle}" />
    <property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
    <property name="testOnReturn" value="${jdbc.testOnReturn}" />
    <property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}"/>
</bean>

4、如果你有些配置项是要加密的,在使用的时候需要解密。
这时你可以继承PropertyPlaceholderConfigurer,重写它的convertPropertyValue或者convertProperty方法进行解密

1
2
3
4
5
6
7
8
9
10
11
@Override
protected String convertPropertyValue(String originalValue)
{
    return 解密(originalValue);
}
 
@Override
protected String convertProperty(String propertyName, String propertyValue)
{
    return 解密(originalValue);
}

然后把id=”propertyConfigurer”的class换成你自己的class。
这样就可以在配置文件中按你的格式配置密文了。

留言

提示:你的email不会被公布,欢迎留言^_^

*

验证码 *