这篇文章和下面两篇文章有关联,请先阅读下面两篇文章。
http://xieyan30.iteye.com/admin/blogs/1831311
http://xieyan30.iteye.com/admin/blogs/1831034
说到spring应用外部属性文件,有时我们需要对外部属性文件中特殊的信息进行加密处理,但是spring的PropertyPlaceholderConfigurer类没有提供对密文版的属性文件支持,所以我们需要自己去扩展这个类。
示例:
1,对jdbc.properties中的userName,password进行加密处理。同时演示了properties文件引用自身的属性(url引用了dbName)。
driverClassName=com.mysql.jdbc.Driver dbName=D8yx9QXmK5E= url=jdbc:mysql://localhost:3306/${dbName} userName=nskJzTSqMLk= password=iFIkcE3fz5I=
2,扩展PropertyPlaceholderConfigurer
package spring3.pripertyFile; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer { private static final String[] encryptPropNames = { "userName", "password", "dbName" }; @Override protected String convertProperty(String propertyName, String propertyValue) { if (isEncryptProp(propertyName)) { return DESUtils.getDecryptString(propertyValue); } else { return propertyValue; } } private boolean isEncryptProp(String propertyName) { for (String encryptPropName : encryptPropNames) { if (encryptPropName.equals(propertyName)) { return true; } } return false; } }
3,配置我们的扩展类
如果使用自定义的属性文件扩展类,<context:property-placeholder>就无法使用了,要使用传统的配置方案
由于本人机器上没有真实的DB,所以做个测试类进行演示,原理一样。请勿见怪。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd "> <!-- 引入外部属性文件 --> <bean class="spring3.pripertyFile.EncryptPropertyPlaceholderConfigurer" p:location="classpath:spring3/pripertyFile/jdbc.properties" p:fileEncoding="utf-8"/> <!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="${driverClassName}" p:url="${url}" p:userName="${userName}" p:password="${password}"/> --> <bean id="dataSource" class="spring3.pripertyFile.DataSourceTest" p:driverClassName="${driverClassName}" p:url="${url}" p:userName="${userName}" p:password="${password}"/> </beans>
4,测试是否取得正确的属性值
package spring3.pripertyFile; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "spring3/pripertyFile/spring.xml"); DataSourceTest dataSource = (DataSourceTest) context .getBean("dataSource"); System.out.println(dataSource.getDriverClassName()); System.out.println(dataSource.getUrl()); System.out.println(dataSource.getUserName()); System.out.println(dataSource.getPassword()); } }
结果:
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/testdb root 1234
相关推荐
在Spring框架中,属性文件是配置关键信息的常用...通过这种方式,你可以在Spring中安全地使用外部属性文件,同时满足系统的安全需求。这种做法不仅可以提高应用的可维护性和部署效率,还能保护敏感信息,降低安全风险。
在实际使用中,开发者需要在自己的POM文件中添加jasypt-spring-boot-starter的依赖,然后在配置文件(如application.properties或application.yml)中声明加密的属性,并指定相应的密钥。这样,Spring Boot在启动时...
本笔记将专注于Spring框架中的一个关键特性——通过`property-placeholder`使用外部属性文件,这在实际项目中非常常见,能够有效地实现配置的解耦和管理。 首先,让我们理解`property-placeholder`的概念。在Spring...
jasypt-spring-boot是Jasypt为Spring Boot定制的一个集成库,它可以自动配置Spring Boot的环境,使得我们可以在配置文件中使用加密的属性值。通过简单的步骤,我们就可以将敏感信息如数据库密码、API密钥等加密存储...
Spring Cloud Config的文档还会涉及到其他的概念和组件,比如通过GitHub、SVN等外部仓库管理配置文件,配置更新的通知机制,客户端的配置加载策略等等。由于文档是中英文对照版,如果翻译质量不高,读者可以通过提供...
PropertyPlaceholderConfigurer 不仅可以用于加载 Properties 文件,还可以用于实现其他功能,例如属性文件加密解密等。在后续的文章中,我们将继续讨论这些扩展应用。 PropertyPlaceholderConfigurer 是 Spring ...
从提供的文件内容来看,主要涉及到的是Spring Cloud的多个模块和功能点,接下来将对其中的关键知识点进行详细解释: ### 1. Spring Cloud Context模块 - **ApplicationContextServices**: Spring Cloud为...
- 可以使用`spring.profiles.include`属性包含其他配置文件。 5. **配置文件的动态刷新** - 当配置文件位于外部(如Config Server)并开启`spring.cloud.config.server.auto-refresh=true`时,配置可实时刷新。 ...
- **配置文件:** 通过 `application.properties` 或 `application.yml` 文件来配置 Spring Boot 应用程序。 - **命令行参数:** 在运行时通过命令行参数来传递配置信息。 **6.9 如何使用 Spring Boot 实现异常处理...
在使用 Spring Cloud 时,需要注意到由于“非法密钥大小”而导致的异常问题,可以通过安装 Java 加密扩展(JCE)无限强度管理策略文件来解决。 Spring Cloud 根据非限制性 Apache 2.0 许可证发布,开发人员可以自由...
- **加密和解密**:讲解如何使用Spring Cloud Config服务器加密和解密敏感信息。 - **密钥管理**:讨论如何管理加密密钥,并确保它们的安全。 - **创建用于测试的密钥库**:提供步骤指导用户如何创建一个用于测试...
- **改变引导位置 Properties**:在 Spring Cloud 中,可以通过改变引导文件的位置来调整应用程序的配置方式。 - **覆盖远程 Properties 的值**:Spring Cloud 支持从远程服务获取配置信息,并允许在本地覆盖这些...
4. **配置文件加密**: - **Jasypt**:在Spring Boot中,我们可以使用Jasypt库来对敏感信息如密码进行加密。Jasypt提供了`encrypt`和`decrypt`命令行工具,以及`BasicTextEncryptor`类在代码中加密和解密。 5. **...
在Spring框架中,读取和使用Properties文件是一种常见的配置方式,尤其当涉及到数据库连接、环境变量等需要在运行时动态加载或更改的信息时。本文将深入解析如何在Spring环境中读取Properties文件,包括配置步骤、...
- `bootstrap.properties` 适用于加载外部配置中心(如 Spring Cloud Config)、固定不可覆盖的属性和加密/解密场景。 3. **Spring、SpringBoot、SpringMVC 的区别**: - Spring 是基础框架,提供 IOC 容器和 AOP...
Spring Boot 项目的自动化配置,而 bootstrap 配置文件有以下几个应用场景:使用 Spring Cloud Config 配置中心时,需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;...
Spring Cloud Context 添加了一个引导上下文,作为主应用程序上下文的父上下文,负责加载外部配置属性和解密。通过设置 `spring.cloud.bootstrap.enabled`,可以选择启用或禁用引导过程。应用程序上下文层次结构允许...
bootstrap 配置文件有以下几个应用场景:使用 SpringCloudConfig 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;一些固定的不能被覆盖的属性;一些加密/...
- **使用外部属性文件**:探讨如何利用外部属性文件来管理应用程序的配置信息,特别是加密属性文件的使用技巧。 - **国际化信息**:解释Spring框架如何支持多语言环境下的国际化需求。 - **容器事件体系**:详细介绍...
Spring Cloud应用程序通过创建一个名为“bootstrap”的应用程序上下文来从外部源加载配置属性,并负责解密本地外部配置文件中的属性。引导属性默认以高优先级加载,防止本地配置覆盖。 #### 引导上下文(Bootstrap ...