SpringBoot集成jasypt,加密yml配置文件

SpringBoot集成jasypt,加密yml配置文件

最新项目安全检测,发现配置文件中数据库密码,redis密码仍处理明文状态

一、pom配置

java 复制代码
<!-- 配置文件yml加密 -->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>

二、生成密文代码

仅作为生成密文的工具类

java 复制代码
package com;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class JasyptUtil {

    private final static String SECRECT = "1234qwer"; //秘钥
    private final static String ALGORITHM = "PBEWithMD5AndDES"; //加密算法

    @Test
    public void testEncrypt() throws Exception {
        System.out.println("密文密码:" + encrypt("myPassword"));
    }

    private String encrypt(String text){
        StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
        config.setAlgorithm(ALGORITHM);
        config.setPassword(SECRECT);
        standardPBEStringEncryptor.setConfig(config);
        return standardPBEStringEncryptor.encrypt(text);
    }

    public String decrypt(String text) {
        StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();
        config.setAlgorithm(ALGORITHM);
        config.setPassword(SECRECT);
        standardPBEStringEncryptor.setConfig(config);
        return standardPBEStringEncryptor.decrypt(text);
    }

}

三、配置

3.1、yml加密配置

(jasypt配置一定要放最上面)

java 复制代码
#加密配置
jasypt:
  encryptor:
    password: 1234qwer # 秘钥
    algorithm: PBEWithMD5AndDES # 加密算法
    iv-generator-classname: org.jasypt.iv.NoIvGenerator

3.2、密文配置

使用工具类加密之后的密文,直接放在配置文件中,使用 ENC()

3.3、启动配置

有的说法还需要在启动类做一下配置,我这边并没有配置,也可直接使用。

如无法启动,可在启动类配置@EnableEncryptableProperties

3.4、部署配置

开发过程中,将秘钥直接放在yml中可以,但是发布到生产之后,这样放的话,那跟明文也没有什么区别了。

所以发布的时候,password 的配置空着即可。通过jar包的启动命令,来设置秘钥。如下:

java 复制代码
nohup java -jar -Djasypt.encryptor.password='1234qwer' /app/web.jar --server.port=8080 --spring.config.location=/app/web.yml >> /app/web.out 2>&1 &

四、遇到的一些坑

1、jasypt的配置文件要放在ENC()密文配置的上面。

2、版本需要匹配

3、启动命令秘钥需要加'

报错:Failed to bind properties under 'spring.datasource.password' to java.lang.String
参考:https://blog.csdn.net/qq_38254635/article/details/132027639

相关推荐
络74 分钟前
IDEA导入并启动若依项目步骤(SpringBoot+Vue3)
java·spring boot·mysql·vue·intellij-idea
几颗流星5 分钟前
SpringBoot项目集成达梦数据库
java·后端
masx2008 分钟前
升级uptime-kuma版本2.0.0-beta.2的cloudflared版本到2025.4.0
运维·后端
帆仔哟33 分钟前
【农气项目】基于适宜度的产量预报
java
MerlinTheMagic1 小时前
Spring AI 核心概念
java·人工智能·spring
冼紫菜1 小时前
基于Redis实现高并发抢券系统的数据同步方案详解
java·数据库·redis·后端·mysql·缓存·性能优化
碎梦归途1 小时前
23种设计模式-结构型模式之适配器模式(Java版本)
java·开发语言·jvm·单例模式·设计模式·适配器模式
wkj0011 小时前
JDK版本与Spring Boot版本之间对应关系
java·linux·spring boot
异常君1 小时前
HTTP头中的Accept-Encoding与Content-Encoding深度剖析
后端·nginx·http
西洼工作室1 小时前
黑马商城-微服务笔记
java·笔记·spring·微服务