Spring配置文件内容加密

spring框架在一些对安全性要求较高的生产环境下,配置文件不允许出现明文用户名密码配置,如数据库配置等。本文主要用于解决明文用户名密码加密。

通过继承spring配置类并重写处理方法实现密文解密    

public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
	 private String[] encryptPropNames = {"username", "password"};  

	@Override
	protected void processProperties(ConfigurableListableBeanFactory beanFactory,
			Properties props) throws BeansException {
		try {
		for (int i = 0;i<encryptPropNames.length;i++){
			 String value = props.getProperty(encryptPropNames[i]);
             if (value != null) {
					props.setProperty(encryptPropNames[i],new String(DES.decrypt(new BASE64Decoder().decodeBuffer(value), "解密秘钥")));
             }
            
		}
		super.processProperties(beanFactory, props);
		} catch (Exception e) {
			 e.printStackTrace();
             throw new BeanInitializationException(e.getMessage());
		}
	}  
}

配置applicationContext.xml文件,并在jdbc.properties中设置密文(根据解密秘钥生成)    

<!-- class填写刚才那段代码的类路径-->
<bean id="propertyConfigurer" class="com.**.EncryptPropertyPlaceholderConfigurer">  
            <property name="locations">
                <list>
                    <value>classpath:jdbc.properties</value>
                </list>
            </property>
    </bean>

第二种方式

package com.zheng.common.plugin;

import com.zheng.common.util.AESUtil;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;


public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

	private String[] propertyNames = {
		"master.jdbc.password", "slave.jdbc.password", "generator.jdbc.password", "master.redis.password"
	};

	/**
	 * 解密指定propertyName的加密属性值
	 * @param propertyName
	 * @param propertyValue
	 * @return
	 */
	@Override
	protected String convertProperty(String propertyName, String propertyValue) {
		for (String p : propertyNames) {
			if (p.equalsIgnoreCase(propertyName)) {
                // 加密算法
				return AESUtil.aesDecode(propertyValue);
			}
		}
		return super.convertProperty(propertyName, propertyValue);
	}

}
原文地址:https://www.cnblogs.com/liclBlog/p/15349532.html