Spring的框架中,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类可以将.properties(key/value形式)文件中
一些动态设定的值(value),在XML中替换为占位该键($key$)的值,
.properties文件可以根据客户需求,自定义一些相关的参数,这样的设计可提供程序的灵活性。
xml中的配置文件
<bean id="propertyConfigurer" class="com.datasure.util.filter.EncryptablePropertyPlaceholderConfigurer"> <property name="locations"> <list><value>classpath:jdbc.properties</value></list> </property> </bean>
public class EncryptablePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer { private static final String key = "helloworld"; protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException { try { Des des = new Des(); String username = props.getProperty("jdbc.username"); if (username != null) { props.setProperty("jdbc.username", des.Decrypt(username, des.hex2byte(key))); } String password = props.getProperty("jdbc.password"); if (password != null) { props.setProperty("jdbc.password", des.Decrypt(password, des.hex2byte(key))); } String url = props.getProperty("jdbc.url"); if (url != null) { props.setProperty("jdbc.url", des.Decrypt(url, des.hex2byte(key))); } String driverClassName = props.getProperty("jdbc.driverClassName"); if(driverClassName != null){ props.setProperty("jdbc.driverClassName", des.Decrypt(driverClassName, des.hex2byte(key))); } super.processProperties(beanFactory, props); } catch (Exception e) { e.printStackTrace(); throw new BeanInitializationException(e.getMessage()); } } }
通过如上配置就可以对配置文件进行解密操作