一般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
相关推荐
《ShardingSphere-JDBC 4.1.1:分布式数据库解决方案的关键组件》 ShardingSphere-JDBC,作为Apache ShardingSphere的重要组成部分,是一款轻量级的Java框架,它旨在为传统JDBC用户提供分布式数据库解决方案。在...
PolarDB-JDBC18支持动态配置数据库连接参数,如自动重连、超时设置等,适应各种复杂的网络环境。 2.4 安全性 通过SSL加密传输,保证了数据在传输过程中的安全性,防止数据被窃取或篡改。 三、使用PolarDB-JDBC18 ...
首先,我们来看`dbconfig.properties`文件,这是Spring项目中常见的用于存储数据库连接配置的文件。通常,这个文件会包含如下内容: ``` # 数据库连接配置 jdbc.url=jdbc:mysql://localhost:3306/mydb jdbc....
**Sharding-JDBC** 是阿里巴巴开源的一个轻量级 Java 框架,主要用于对数据库进行分片、读写分离、数据加密等操作。其主要优势在于不依赖任何中间件,部署简单,性能损耗低,易于维护。Sharding-JDBC 作为 JDBC 的...
在压缩包子文件的文件名称列表 "sec" 中,虽然没有具体文件名,但可以推测这可能包含了一些与Spring Security相关的配置文件、SQL脚本或示例代码。例如,可能有一个`spring-security-config.xml`,这是Spring ...
4. **YAML配置方式**:Sharding-JDBC支持使用YAML文件进行配置,学习者将了解到如何通过YAML文件设置数据库连接信息、分片策略等,以实现更加简洁的配置管理。 5. **SpringBoot集成Sharding-JDBC**:SpringBoot的...
除此之外,可能还有其他依赖库,如Spring Data的相关模块,以及用于数据库操作的JDBC驱动等。 在实际开发中,正确地引用这些jar包并配置Spring容器,可以帮助我们构建出松耦合、高可测试性的应用程序。同时,了解每...
在"spring-boot-shardingjdbc-main"这个项目主目录中,包含了项目的源代码、配置文件等。开发者可以通过阅读这些文件,了解如何集成ShardingJDBC到Spring Boot应用中,以及如何定义和实现分库分表的策略。项目中可能...
为了保护敏感的数据库连接信息,配置文件通常会被加密或者存储在环境变量中,以防止未授权访问。此外,密码加密算法和盐值的使用也是保障用户数据安全的重要手段。 6. **Spring Boot集成**: CAS 4.2.7版本很可能...
通过查看和分析这个项目,你可以学习如何在实际应用中配置和使用 Spring Session with JDBC,包括其配置文件、实体类、数据库脚本等。 10. **最佳实践** - 使用自定义的会话 ID 生成器,以增加安全性。 - 定期...
这是一个简单的案例用来实现Spring中jdbc.properties属性文件进行密文处理,代码中的学生实体自己根据需要在数据库中进行创建
在数据访问层,Spring Framework 5.0.2.RELEASE改进了对JDBC、JPA、Hibernate等ORM框架的支持。它提供了更丰富的模板类,简化了数据库操作。此外,对于NoSQL数据库,如MongoDB和Cassandra,Spring Data项目提供了...
**JDBC通过配置文件连接数据库** Java Database Connectivity (JDBC) 是Java编程语言与各种数据库进行交互的标准API。它允许Java应用程序执行SQL语句并处理返回的结果。在实际开发中,我们经常需要通过配置文件来...
支持数据库敏感配置信息 加密(可自定义) ENC()。 支持每个数据库独立初始化表结构schema和数据库database。 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。 支持 自定义注解 ,需继承DS(3.2.0+)。 ...
4. **数据访问**:Spring 支持多种数据访问技术,包括JDBC、ORM(Object-Relational Mapping)框架如Hibernate和MyBatis,以及NoSQL数据库。它提供了统一的API,简化了数据访问操作。 5. **事务管理**:Spring 提供...
支持数据库敏感配置信息 加密(可自定义) ENC()。 支持每个数据库独立初始化表结构schema和数据库database。 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。 支持 自定义注解 ,需继承DS(3.2.0+)。 ...
通过这种方式,我们实现了从`jdbc.properties`文件中读取JDBC连接参数,有效地解耦了配置和代码,使得数据库配置更易于管理和维护。同时,由于属性文件不在源码控制中,可以更好地保护敏感信息,比如数据库密码。在...
在本场景中,我们将探讨如何使用 Oracle 数据库作为 Spring Cloud Config 的后端存储来保存和管理配置信息。 首先,我们需要了解 Spring Cloud Config 的基本架构。Config Server 是服务端,负责加载和提供配置信息...