Springboot + dynamic + druild 配置动态数据源 数据库密码加密教程

本文介绍了在Springboot项目中,如何通过MybatisPlus和Druid实现数据库连接的加密,包括密钥生成、测试类的编写以及在application.yml中的配置。重点展示了如何使用公钥加密密码并动态切换数据源。
摘要由CSDN通过智能技术生成

项目搭建

Springboot: 2.7.14
Mybatis Plus: 3.5.3.1
druid: 1.2.14
引入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>${dynamic-datasource-spring-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid-spring-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

写一个密钥生成测试类

import com.alibaba.druid.filter.config.ConfigTools;
import org.junit.jupiter.api.Test;

import java.util.UUID;

public class EncryptedTest {

    public static final String PASSWORD;

    static {
    	// 这里修改成加密前的原始密码
        PASSWORD = UUID.randomUUID().toString();
    }

    /**
     * 密码加密
     */
    @Test
    public void druidPasswordEncryptedTest() throws Exception {

        String[] encryptedPasswordAndPublicKey = ConfigTools.genKeyPair(512);
        String publicKey = encryptedPasswordAndPublicKey[0];
        String privateKey = encryptedPasswordAndPublicKey[1];


        // 使用公钥加密密码
        String encryptedPassword = ConfigTools.encrypt(publicKey, PASSWORD);

        // 原始密码
        System.out.println("rawPassword: " + PASSWORD);

        System.out.println("encryptedPassword: " + encryptedPassword);
        System.out.println("privateKey: " + privateKey);
        System.out.println("publicKey: " + publicKey);

    }
}

运行测试用例,获取公私钥:
在这里插入图片描述

application.yml 配置

spring:
  datasource:
    dynamic:
      # 主数据源
      primary: master
      datasource:
        master:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: org.postgresql.Driver
          url: jdbc:postgresql://localhost:5432/demo01
          username: root
          password: ENC(${datasource.master.encryptedPassword})
          public-key: ${datasource.master.privateKey}
          druid:
            filters: stat,wall,slf4j
            max-active: 100
            initial-size: 1
            max-wait: 60000
            min-idle: 1
            validation-query: select 1
        slave01:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: org.postgresql.Driver
          url: jdbc:postgresql://localhost:5432/demo02
          username: root
          password: ENC(${datasource.slave01.encryptedPassword})
          public-key: ${datasource.slave01.privateKey}
          druid:
            filters: stat,wall,slf4j
            max-active: 100
            initial-size: 1
            max-wait: 60000
            min-idle: 1
            validation-query: select 1

datasource:
  master:
    # 填写生成的加密密码
    encryptedPassword: IsJkMEr9vWsjn9GdEjHIu3JZbTTFvQ7z74Tznn0oi4XtEiguOwf9bUn869Ku9dZP6BdD+jVBDYX4gGQCO99GZQ==
    privateKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKTnmr1JLjUcAu3nSzL29aA/izsu2mlktQzFejTzz5lTv0J9dwPoNfRINP7PUzwp16dPVy4lgM3LLhOYdvV16ecCAwEAAQ==
  slave01:
    encryptedPassword: IsJkMEr9vWsjn9GdEjHIu3JZbTTFvQ7z74Tznn0oi4XtEiguOwf9bUn869Ku9dZP6BdD+jVBDYX4gGQCO99GZQ==
    privateKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKTnmr1JLjUcAu3nSzL29aA/izsu2mlktQzFejTzz5lTv0J9dwPoNfRINP7PUzwp16dPVy4lgM3LLhOYdvV16ecCAwEAAQ==

如何使用

使用 @DS(value = “slave01”) 切换数据源

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值