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);
    	}
    
    }
    
  • 相关阅读:
    tomcat配置通过域名直接访问项目首页步骤
    kafka配置参数
    nginx平滑升级
    redsi一主两从三哨兵
    kill
    lelnet爱一直在
    在linux中查看进程占用的端口号
    监控redis
    老猿学5G随笔:RAN、RAT以及anchor移动性锚点的概念
    老猿学5G随笔:5G网元功能体NF以及NF之间的两种接口--服务化接口和参考点
  • 原文地址:https://www.cnblogs.com/liclBlog/p/15349532.html
Copyright © 2011-2022 走看看