Spring的PropertyPlaceholderConfigurer应用与集成项目properties文件管理

本文介绍如何使用Spring的PropertyPlaceholderConfigurer类来加密敏感信息,如数据库账号密码,并在运行时解密。同时展示了如何加载多个配置文件,适用于短信模板、提示模板等资源数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PropertyPlaceholderConfigurer类就是bean factory post-processor的一种,它的作用是一个资源属性的配置器,能够将BeanFactory的里定义的内容放在一个以.propertis后缀的文件中。因此我们可以继承该类,实现自己定制的properties文件管理。

1、数据库的配置文件jdbc.properties存放数据库账号,密码及地址信息。这些数据直接暴露在外。所以需要对这些数据进行加密,但是使用加密后的数据直接去链接jdbc驱动账号密码不一致。此时我们可以定制该方法在读取的时候将密码解密.

2、初始化的时候。可以指定多个properties文件加载,其中可以包含静态配置文件。例如:短信模板,提示模板等资源数据。都可以进行托管

spring中配置

	<bean id="springPropertiesUtil" class="cn.unitedtech.util.SpringPropertiesUtil">
		<property name="locations">
			<list>
				<value>classpath:mysql.properties</value>
				<value>classpath:shiro.properties</value>
				<value>classpath:config.properties</value>
			</list>
		</property>
		<property name="fileEncoding" value="UTF-8" />
	</bean>

代码管理
        private static Map<String, String> propertiesMap;
	
	private final Log log = LogFactory.getLog(getClass());
	
	private int springSystemPropertiesMode = SYSTEM_PROPERTIES_MODE_FALLBACK;
	
	private final String userNameKey = "jdbc.userName";
	private final String passWordKey = "jdbc.passWord";

    @Override
	public void setSystemPropertiesMode(int systemPropertiesMode) {
        super.setSystemPropertiesMode(systemPropertiesMode);
        springSystemPropertiesMode = systemPropertiesMode;
    }

    @Override
    protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException {
        String userName = props.getProperty(userNameKey);
		String password = props.getProperty(passWordKey);
		
		try {
			if (StringUtils.isNotEmpty(userName)) {
					props.setProperty(userNameKey, DESUtil.decrypt(userName));
			}
			if (StringUtils.isNotEmpty(password)) {
				props.setProperty(passWordKey, DESUtil.decrypt(password));
			}
		} catch (Exception e) {
			log.error("decrypt password exception", e);
		}

        propertiesMap = new HashMap<String, String>();
        for (Object key : props.keySet()) {
            String keyStr = key.toString();
            if( null != keyStr && -1 >= keyStr.indexOf("jdbc")  ){
            	String valueStr = resolvePlaceholder(keyStr, props, springSystemPropertiesMode);
            	propertiesMap.put(keyStr, valueStr);
            }
        }
        
        super.processProperties(beanFactory, props);
    }

    public static String getProperty(String name) {
        return propertiesMap.get(name).toString();
    }

其中 propertiesMap 存放了非jdbc文件的数据。通过getProperty方法进行读取



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值