数据库密码在springboot中使用druid自定义加解密

该文介绍了如何使用Druid数据源配合RSA算法对MySQL数据库的密码进行加密和解密。通过在项目pom.xml中添加Druid依赖,配置application-druid.yml文件,包括数据库连接信息和加密后的密码,以及在DruidProperties中处理解密逻辑。此外,文章还详细说明了如何通过命令行工具生成加密密码,并在启动应用时提供公钥。
摘要由CSDN通过智能技术生成

此处以mysql密码加解密为例,该方式使用druid支持对密码进行加密,所用算法:RSA/ECB/PKCS1Padding,也就是RSA算法

在项目pom文件中加入以下依赖:

  <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.8</version>
  </dependency>

1.application-druid.yml配置

# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
            # 主库数据源
            master:
#                driverClassName: com.mysql.cj.jdbc.Driver
                url: jdbc:mysql://192.168.1.xxx:3306/project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: dba
                #password为加密后的密文,如何获取到该密码在步骤三有介绍
                password: ZbUC5fNEM+KY4xswZlx623c9qSM/DF7wpIvG63lTwWcnKWmo9LHL4LHCYv/inoZbbopTA6I5OCy3WQ0xNqpd9w==

            # 初始连接数
            initialSize: 5
            # 最小连接池数量
            minIdle: 10
            # 最大连接池数量
            maxActive: 20
            # 配置获取连接等待超时的时间
            maxWait: 15000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 配置一个连接在池中最大生存的时间,单位是毫秒
            maxEvictableIdleTimeMillis: 900000
            # 配置检测连接是否有效
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            webStatFilter: 
                enabled: true
            statViewServlet:
                enabled: true
                # 设置白名单,不填则允许所有访问
                allow:
                url-pattern: /druid/*
            filter:
                stat:
                    enabled: true
                    # 慢SQL记录
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: true
                wall:
                    config:
                        multi-statement-allow: true
            #数据库密码加解密操作
            filters:
                config:
                    #是否启用数据库密码加密,true启用;false不启用
                    enabled: true
            connect-properties:
                config.decrypt: true
                #spring.datasource.druid.publicKey需要作为参数在启动命令中添加详见步骤三
                config.decrypt.key: ${spring.datasource.druid.publicKey}

2.DruidProperties添加如下代码

    @Value("${spring.datasource.druid.filters.config.enabled}")
    private boolean configFilterEnabled;

    @Value("${spring.datasource.druid.connect-properties.config.decrypt}")
    private String decryptEnabled;

    @Value("${spring.datasource.druid.connect-properties.config.decrypt.key}")
    private String decryptKey;

    // dataSource 方法中添加
    if (configFilterEnabled) {
            try {
                /* 启用数据库密码解密 */
                datasource.setFilters("config");
                Properties properties = new Properties();
                properties.put("config.decrypt", decryptEnabled);
                properties.put("config.decrypt.key", decryptKey);
                datasource.setConnectProperties(properties);
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }

3.获取数据库加密后的密码 

在druid-1.2.8.jar文件路径下打开cmd,输入如下命令,“My25#Dxm10Kz6”为数据库明文密码 ;“> pwd.txt”为运行命令后要输出内容到文件的名称

java -cp druid-1.2.8.jar com.alibaba.druid.filter.config.ConfigTools My25#Dxm10Kz6 > pwd.txt

输出的内容:

privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEArV2ndV7QpTXhuMDVMiRnoibRq9wjgBWYEH2JGUs+0X5GeUIeBTEvlJhE1mQfqfh5evKDYJGdaVS+GnrQzmuH+QIDAQABAkEAqFxkTQKIQ3lBPSffo3NhRULHqkv+Gdxesd0H8I13cv/BfuinJGiApb/L8dVTuKukhKBQrl6nk7zVJxki8/XoJQIhAOI2naYwquLcniwHMGZe1fHFQ6OxpFDtT4X0yoRXS25vAiEAxDGchAmi+oFwzwFnRol2kUgeup51UD1eAh2kk9UzJBcCIQDc5PA05Lk6Jqzd2XdNv7WzDSnrowANdm59JHjNmmCySQIhALf3wUj6dE2rxKkHKt00lu6iDtZ1MZH9CUK4oxNQTnUfAiBOFG5Qyl3wUDQ/QUeN7zGDvXw1eC4WV1thOxfuaQmhFg==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK1dp3Ve0KU14bjA1TIkZ6Im0avcI4AVmBB9iRlLPtF+RnlCHgUxL5SYRNZkH6n4eXryg2CRnWlUvhp60M5rh/kCAwEAAQ==
password:Nz1eflga1mBixG6Rqcc0+vjj+WLdeCV0QEVQH5WGElCSUSB60t2H2+Sa6dMKmScy6tmzyXM/uxRC2A3S9EzQIQ==

包含三个内容:privateKey--私钥;publicKey--公钥;password--加密后的密码,需要配置到配置文件中,详见步骤1。其中公钥需要在启动jar包时,添加到启动命令中:

java -jar %JAVA_OPTS%  project.jar --spring.datasource.druid.publicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK1dp3Ve0KU14bjA1TIkZ6Im0avcI4AVmBB9iRlLPtF+RnlCHgUxL5SYRNZkH6n4eXryg2CRnWlUvhp60M5rh/kCAwEAAQ==

spring.datasource.druid.publicKey参数就是配置在配置文件中的,详见步骤1中最后一行代码

具体启动方式详见bat文件启动jar包

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值