springboot(14)配置文件加密解密

1、介绍

jasypt-spring-boot

jasypt可以在springboot注入property和yml配置文件中的值之前,将配置文件中的值先预先处理的工具。可以用来实现对数据库账号密码等敏感信息密文解密的功能。

2、Maven依赖

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>

3、注册解密Bean

@Configuration
public class EncryptionPropertyConfig {

    @Bean(name="encryptablePropertyResolver")
    public EncryptablePropertyResolver encryptablePropertyResolver() {
        return new EncryptionPropertyResolver();
    }

    class EncryptionPropertyResolver implements EncryptablePropertyResolver {

        @Override
        public String resolvePropertyValue(String value) {
            if(StringUtils.isBlank(value)) {
                return value;
            }
            // 值以DES@开头的均为DES加密,需要解密
            if(value.startsWith("DES@")) {
                return resolveDESValue(value.substring(4));
            }
            // 不需要解密的值直接返回
            return value;
        }

        private String resolveDESValue(String value) {
            // 自定义DES密文解密
            return DESUtil.getDecryptString(value);
        }

    }
}

4、测试

4.1、property配置文件

# 127.0.0.1的密文为e3zcSlYS29N0Y3i+mVdkgQ==
datasource.host=DES@e3zcSlYS29N0Y3i+mVdkgQ==
# 3306的密文为S6mBLsaSBEw=
datasource.port=DES@S6mBLsaSBEw=
datasource.database=test
datasource.url=jdbc:mysql://${datasource.host}:${datasource.port}/${datasource.database}?useUnicode=true&amp;characterEncoding=utf8

4.2、注入

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {

    @Value("${datasource.url}")
    private String url;

    @Test
    public void testJasypt() {
        System.out.println(url);
    }

}

4.3、输出

jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=utf8
在 Spring Boot 项目中,有时为了保护敏感信息(如数据库密码、API 密钥等),会对配置文件中的值进行加密。如果你需要对 `Enc` 加密后的值进行解密并正常使用,可以参考以下步骤。 ### 解决思路 #### 步骤一:引入依赖 首先,你需要确保项目的 `pom.xml` 或 `build.gradle` 文件中包含了用于加解密的相关库。例如常见的 Jasypt 库: ```xml <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version> </dependency> ``` #### 步骤二:设置加密秘钥 Jasypt 需要一个秘钥来进行加解密操作。可以在应用启动参数或环境变量中指定该秘钥。比如通过命令行传入: ```bash java -Djasypt.encryptor.password=yourEncryptionKey -jar your-app.jar ``` 也可以将它放在 `application.properties` 或 `application.yml` 中: ```properties jasypt: encryptor: password: yourEncryptionKey ``` #### 步骤三:标记需加密字段 对于需要加密的属性,在配置文件中加上前缀 `{ENC}` 来标识这是经过加密的内容。例如: ```properties spring.datasource.password={ENC}encryptedValueHere ``` 这里假设 `encryptedValueHere` 已经是由工具生成好的加密字符串。 #### 步骤四:自动解密机制 当应用程序运行时,Spring Boot 和 Jasypt 插件会检测到 `{ENC}` 前缀,并使用提供的 secret key 自动完成解密过程。最终程序读取的是原始明文数据而非加密形式的数据。 --- ### 示例代码片段 假如我们有一个简单的服务类需要用到上述已加密的数据库连接密码,则无需手动编写额外的解码逻辑——框架层面已经帮您完成了这些繁杂的工作流。 ```java @Service public class MyService { @Autowired private Environment env; public void printDbPassword(){ System.out.println("Database Password is : "+env.getProperty("spring.datasource.password")); } } ``` 在这个例子中,尽管实际存储于 `.properties` 文件里的内容是以 ciphertext 表达出来的样子存在,但在注入之后得到的就是 plaintext version of the value.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值