`

spring-jdbc文件数据库配置加密

阅读更多

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

通过这个原理,我们把加密后的数据库配置信息放到jdbc.properties文件里,然后自定义一个继承PropertyPlaceholderConfigurer的类,实现解密,把解密后的信息又放回去。最后在配置DataSource时,还是用占位符${}取配置信息。

 

jdbc.properties文件内容:

jdbc.driverClassName = 4A490AA9B8CD7DBD61E70367C868F950541890F991000CD76A707177A0A507B9
jdbc.url = FA0DD23D31BCF4C6058626849C4611455A74B444893626DE9CF7D1E05F15586C54C098BFA29BC54A
jdbc.username = 5DE376A122083A8945FF13A1D5AFD452
jdbc.password = 5DE376A122083A8945FF13A1D5AFD452

 

 

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

public class EncryptablePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
	private static final String key = "0002000200020002";

	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());
			}
		}

 

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

	//加密
	public static String Encrypt(String str, byte[] key){
		Security.addProvider(new com.sun.crypto.provider.SunJCE());
		byte[] encrypt = encryptMode(key, str.getBytes());
		return byte2hex(encrypt);
	}

	//解密
	public static String Decrypt(String str, byte[] key){
		Security.addProvider(new com.sun.crypto.provider.SunJCE());
		byte[] decrypt = decryptMode(key, hex2byte(str)); 
		return new String(decrypt);
	}

 

 

spring配置:

 <bean id="propertyConfigurer"  
       class="com.eeds.core.security.datasource.EncryptablePropertyPlaceholderConfigurer">  
        <property name="locations">  
            <list>  
                <value>classpath:config/spring/jdbc-test.properties</value>  
            </list>  
        </property>  
    </bean>

 

	<!-- 测试环境 -->
	<bean id="econsoleDS" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass">
			<value>${jdbc.driverClassName}</value>
		</property>			 	
		<property name="jdbcUrl">
			<value>${jdbc.url}</value>
		</property>	
		<property name="user">
			<value>${jdbc.username}</value>
		</property>
		<property name="password">
			<value>${jdbc.password}</value>
		</property>
                 </bean>

 

 

 参考资料:

Spring配置密码加密
http://tech.it168.com/oldarticle/2007-03-07/200703071252520_3.shtml
http://blog.csdn.net/dyyaries/article/details/7399414

分享到:
评论
2 楼 hhybtczit 2017-02-16  
请问这样做的意义何在?
1 楼 ron.luo 2015-06-11  
哥们,给了思路,赞一个。

相关推荐

    shardingsphere-jdbc-4.1.1依赖包,shardingsphere-jdbc-4.1.1-lib

    《ShardingSphere-JDBC 4.1.1:分布式数据库解决方案的关键组件》 ShardingSphere-JDBC,作为Apache ShardingSphere的重要组成部分,是一款轻量级的Java框架,它旨在为传统JDBC用户提供分布式数据库解决方案。在...

    polardb-jdbc18.zip

    PolarDB-JDBC18支持动态配置数据库连接参数,如自动重连、超时设置等,适应各种复杂的网络环境。 2.4 安全性 通过SSL加密传输,保证了数据在传输过程中的安全性,防止数据被窃取或篡改。 三、使用PolarDB-JDBC18 ...

    Spring数据库连接等配置加密

    首先,我们来看`dbconfig.properties`文件,这是Spring项目中常见的用于存储数据库连接配置的文件。通常,这个文件会包含如下内容: ``` # 数据库连接配置 jdbc.url=jdbc:mysql://localhost:3306/mydb jdbc....

    Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现读写分离.docx

    **Sharding-JDBC** 是阿里巴巴开源的一个轻量级 Java 框架,主要用于对数据库进行分片、读写分离、数据加密等操作。其主要优势在于不依赖任何中间件,部署简单,性能损耗低,易于维护。Sharding-JDBC 作为 JDBC 的...

    spring-security-jdbc

    在压缩包子文件的文件名称列表 "sec" 中,虽然没有具体文件名,但可以推测这可能包含了一些与Spring Security相关的配置文件、SQL脚本或示例代码。例如,可能有一个`spring-security-config.xml`,这是Spring ...

    分库分表实战Spring Boot2+Sharding-JDBC视频教程-课课家教育.docx

    4. **YAML配置方式**:Sharding-JDBC支持使用YAML文件进行配置,学习者将了解到如何通过YAML文件设置数据库连接信息、分片策略等,以实现更加简洁的配置管理。 5. **SpringBoot集成Sharding-JDBC**:SpringBoot的...

    Spring-4.0.3jar包

    除此之外,可能还有其他依赖库,如Spring Data的相关模块,以及用于数据库操作的JDBC驱动等。 在实际开发中,正确地引用这些jar包并配置Spring容器,可以帮助我们构建出松耦合、高可测试性的应用程序。同时,了解每...

    数据库mysql分库分表-spring-boot-shardingjdbc.zip

    在"spring-boot-shardingjdbc-main"这个项目主目录中,包含了项目的源代码、配置文件等。开发者可以通过阅读这些文件,了解如何集成ShardingJDBC到Spring Boot应用中,以及如何定义和实现分库分表的策略。项目中可能...

    cas-server4.2.7数据库配置相关文件以及说明

    为了保护敏感的数据库连接信息,配置文件通常会被加密或者存储在环境变量中,以防止未授权访问。此外,密码加密算法和盐值的使用也是保障用户数据安全的重要手段。 6. **Spring Boot集成**: CAS 4.2.7版本很可能...

    springsession-jdbc:示例应用程序展示了如何使用JDBC配置Spring Session

    通过查看和分析这个项目,你可以学习如何在实际应用中配置和使用 Spring Session with JDBC,包括其配置文件、实体类、数据库脚本等。 10. **最佳实践** - 使用自定义的会话 ID 生成器,以增加安全性。 - 定期...

    Spring中jdbc.properties属性文件进行密文处理

    这是一个简单的案例用来实现Spring中jdbc.properties属性文件进行密文处理,代码中的学生实体自己根据需要在数据库中进行创建

    spring-framework-5.0.2.RELEASE-dist.zip

    在数据访问层,Spring Framework 5.0.2.RELEASE改进了对JDBC、JPA、Hibernate等ORM框架的支持。它提供了更丰富的模板类,简化了数据库操作。此外,对于NoSQL数据库,如MongoDB和Cassandra,Spring Data项目提供了...

    JDBC通过配置文件连接数据库

    **JDBC通过配置文件连接数据库** Java Database Connectivity (JDBC) 是Java编程语言与各种数据库进行交互的标准API。它允许Java应用程序执行SQL语句并处理返回的结果。在实际开发中,我们经常需要通过配置文件来...

    dynamic-datasource-spring-boot-starter-v3.5.1.zip

    支持数据库敏感配置信息 加密(可自定义) ENC()。 支持每个数据库独立初始化表结构schema和数据库database。 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。 支持 自定义注解 ,需继承DS(3.2.0+)。 ...

    最新版spring-framework-4.3.12.RELEASE-dist 完整包

    4. **数据访问**:Spring 支持多种数据访问技术,包括JDBC、ORM(Object-Relational Mapping)框架如Hibernate和MyBatis,以及NoSQL数据库。它提供了统一的API,简化了数据访问操作。 5. **事务管理**:Spring 提供...

    dynamic-datasource-spring-boot-starter-v3.5.1.tar.gz

    支持数据库敏感配置信息 加密(可自定义) ENC()。 支持每个数据库独立初始化表结构schema和数据库database。 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。 支持 自定义注解 ,需继承DS(3.2.0+)。 ...

    spring,配置文件从属性文件读取JDBC连接的相关参数

    通过这种方式,我们实现了从`jdbc.properties`文件中读取JDBC连接参数,有效地解耦了配置和代码,使得数据库配置更易于管理和维护。同时,由于属性文件不在源码控制中,可以更好地保护敏感信息,比如数据库密码。在...

    spring-cloud-config使用oracle存储配置

    在本场景中,我们将探讨如何使用 Oracle 数据库作为 Spring Cloud Config 的后端存储来保存和管理配置信息。 首先,我们需要了解 Spring Cloud Config 的基本架构。Config Server 是服务端,负责加载和提供配置信息...

Global site tag (gtag.js) - Google Analytics