zoukankan      html  css  js  c++  java
  • 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);
    	}
    
    }
    
  • 相关阅读:
    oracle 视图views
    5分钟把任意网站变成桌面软件
    Angular http跨域
    jQuery版本升级踩坑大全
    redis 模糊删除key
    jedisCluster 报错: redis.clients.jedis.exceptions.JedisClusterException: No way to dispatch this command to Redis Cluster because keys have different slots.
    mac电脑复制键失灵
    java8 for ,forEach ,lambda forEach , strean forEach , parller stream forEach, Iterator性能对比
    linux光标操作
    redis hashmap数据结构分析
  • 原文地址:https://www.cnblogs.com/liclBlog/p/15349532.html
Copyright © 2011-2022 走看看