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 思否

相关推荐
程序员小崔日记2 分钟前
技术之外,皆是人间
后端·ruoyi·计算机温情
l1t11 分钟前
DeepSeek总结的PostgreSQL使用 RDTSC 降低 EXPLAIN ANALYZE 的计时开销
数据库·postgresql
lagrahhn11 分钟前
Oracle中各个c版本介绍
数据库·oracle
不懂的浪漫25 分钟前
# mqtt-plus 架构解析(八):Spring Boot 自动装配,这些零件是怎么被粘合起来的
spring boot·后端·物联网·mqtt·架构
却话巴山夜雨时i31 分钟前
互联网大厂Java面试场景:Spring Boot、微服务与Redis实战解析
spring boot·redis·微服务·kafka·prometheus·java面试·电商场景
知识分享小能手34 分钟前
MongoDB入门学习教程,从入门到精通,在生产环境中设置MongoDB(21)
数据库·学习·mongodb
开心就好202541 分钟前
Flutter iOS应用混淆与安全配置详细文档指南
后端·ios
XDHCOM1 小时前
ORA-12445报错:无法更改列隐藏属性,Oracle故障修复与远程处理,网友推荐解决方案
数据库·oracle
掘金者阿豪1 小时前
记一次NFS下的权限踩坑:从“Operation not permitted”到安装成功的折腾实录
后端
麒麟ZHAO1 小时前
鸿蒙flutter第三方库适配 - 文件对比工具
数据库·redis·flutter·华为·harmonyos