SpringBoot中对数据库连接配置信息进行加密处理

1 在项目中加密

1.1 导包

xml 复制代码
<dependency>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>3.0.5</version>
</dependency>

1.2 加密

配置文件

yaml 复制代码
jasypt:
  encryptor:
    password: study-demo
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator

获取配置文件信息

java 复制代码
package com.sky.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 应用配置信息
 *
 * @author wangs
 * @date 2024/9/21 14:18
 */
@Data
@Component
@ConfigurationProperties(value = "jasypt.encryptor")
public class AppProperties {

    /**
     * 加密盐值
     */
    private String password;
}

加密代码

java 复制代码
package com.sky;

import com.sky.properties.AppProperties;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

@SpringBootTest(classes = SkyApplication.class)
@RunWith(SpringRunner.class)
public class EncryptorTest {

    /**
     * MySQL连接信息
     */
    private final static String HOST_NAME = "主机IP";
    private final static String USERNAME = "数据库用户名";
    private final static String PASSWORD = "数据库密码";

    @Resource
    private AppProperties appProperties;


    /**
     * 加密MySQL数据库
     */
    @Test
    public void mysqlEncryptorTest() {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        // 加密盐值
        encryptor.setPassword(appProperties.getPassword());
        String host = encryptor.encrypt(HOST_NAME);
        String username = encryptor.encrypt(USERNAME);
        String password = encryptor.encrypt(PASSWORD);

        System.out.println("host密文:"+host);
        System.out.println("username密文:"+ username);
        System.out.println("password密文:"+password);
    }
}

1.3 修改配置文件

将 1.2 中生成的密文替换配置文件中的明文信息

yaml 复制代码
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    host: ENC(5+NRySB3LIsgOI2IEFrLaAt96lB0kvyK)
    port: 3306
    database: xxx_xxx_xxx
    username: ENC(27L2N1KZZnJWGfYjIXRLcA==)
    password: ENC(f9Dc9EY6TQqmPMqARsO5/g==)

1.4 问题解决

在使用过程中,遇到了一个问题

plain 复制代码
failed to bind properties under spring.datasource.druid.password' to java.lang.String

出现这个问题的时候,在配置文件中,我并没有加上最后面的两行,加上后解决问题

yaml 复制代码
jasypt:
  encryptor:
    password: study-demo
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator

2 参考博客

数据库加密:数据库连接加密(SpringBoot+jasypt加密)

问题报错:springboot - 解决jasypt failed to bind properties - 30岁程序员的挣扎之路 - SegmentFault 思否

相关推荐
BingoGo1 分钟前
“Fatal error: require(): Failed opening required...” 以及如何彻底避免它再次出现
后端·php
zhougl9963 分钟前
Springboot - druid 连接池
java·spring boot·后端
全栈前端老曹3 分钟前
【Redis】发布订阅模型 —— Pub/Sub 原理、消息队列、聊天系统实战
前端·数据库·redis·设计模式·node.js·全栈·发布订阅模型
SQL必知必会4 分钟前
使用 SQL 构建转化漏斗
数据库·sql·数据分析
丿BAIKAL巛6 分钟前
Docker部署的Mysql数据库自动化备份
数据库·mysql·docker
JaguarJack8 分钟前
“Fatal error: require(): Failed opening required...” 以及如何彻底避免它再次出现
后端·php·服务端
爬山算法9 分钟前
MongoDB(11)MongoDB的默认端口号是多少?
数据库·mongodb
betazhou9 分钟前
Mongodb日志类型以及日志轮转
数据库·mongodb
一次旅行10 分钟前
接口自动化测试模板
数据库·python·pytest
MX_935915 分钟前
Spring基本配置和注入配置注解使用
java·后端·spring