springMVC数据库加密解密

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一般spring容器启动时,通过PropertyPlaceholderConfigurer类读取dbconfig.properties文件里的数据库配置信息。

通过这个原理,我们把加密后的数据库配置信息放到dbconfig.properties文件里,然后自定义一个继承PropertyPlaceholderConfigurer的类,实现解密,把解密后的信息又放回去。

dbconfig.properties 文件内容

jdbc.url.jeecg=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
jdbc.username.jeecg=farm45
jdbc.password.jeecg=Biyu5YzU+6sxDRbmWEa3B2uUcImzDo0BuXjTlL505+/pTb+/0Oqd3ou1R6J8+9Fy3CYrM18nBDqf6wAaPgUGOg==
hibernate.dialect=org.hibernate.dialect.OracleDialect
jdbc.dbType=oracle
validationQuery.sqlserver=SELECT 1 FROM DUAL
hibernate.hbm2ddl.auto=none

自定义的取加密信息的类EncryptablePropertyPlaceholderConfigurer

package com.sm.util;
import java.util.Properties;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer{
    
        protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)  
            throws BeansException {  
                try {  
                    String password = props.getProperty("jdbc.password.jeecg");  
                    if (password != null) {  
                        props.setProperty("jdbc.password", Des.Decrypt(password));  
                    }  
                    super.processProperties(beanFactory, props);  
                } catch (Exception e) {  
                    e.printStackTrace();  
                    throw new BeanInitializationException(e.getMessage());  
                }  
                
        }
    
}

Des.java是一个用ConfigTools 加密和解密的工具类

package com.sm.util;
import com.alibaba.druid.filter.config.ConfigTools;
public class Des {
    //加密  
    public static String Encrypt(String str){  
        String encryptPwd = "";
        try {
            encryptPwd = ConfigTools.encrypt(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return  encryptPwd;  
    }  
      
    //解密  
    public static String Decrypt(String str){
        String decryptPwd = "";
        try {
            decryptPwd = ConfigTools.decrypt(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new String(decryptPwd);  
    }  
}

spring配置:


            
               
               classpath:dbconfig.properties    
          
    
      

        init-method="init" destroy-method="close">
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        

        
        
        
        

        
        
        
        
        
        

       
        
        
        
        
            
                true
            

        

    

转载于:https://my.oschina.net/u/3013327/blog/837565

你可能感兴趣的:(springMVC数据库加密解密)