Springboot项目结合druid加密配置数据源连接的用户密码

        之前写了一篇加密springboot项目配置的文章,不过那个是使用Jasypt加密spring boot应用配置文件的敏感信息,那个比较灵活,在需要加密的配置项中将值使用ENC(s1IqO0kn3jDReVSk7ZLiHOVxsTN89nm/exox2AhdtG1sH2Jd7PEXIILoS4YenkuP)这种方式将加密好的字符串包裹起来,然后再使用Jasypt中对应的方法解密就可以了。不过那个使用起来有点麻烦,所以如果你只是想把数据源连接中的用户密码加密配置,那么使用Druid的自带的加解密的方法就非常方便

   最近项目中对数据安全要求较高,运维组要求项目中的数据源的用户密码需要加密配置,所以总结一下使用druid加解密用户密码的方法

项目中使用的是多数据源,所以加入了dynamic-datasource,连接池用的druid

          <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.1</version>
         </dependency>

          <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.5.1</version>
            </dependency>

            <!-- 引入druid数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.22</version>
            </dependency>

            <!-- 引入Mysql Jdbc驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.28</version>
                <scope>runtime</scope>
            </dependency>

数据源配置文件:application-datasource-dev.yml

spring:
  datasource:
    dynamic:
      druid:
        # 连接池的配置信息
        # 初始化大小,最小,最大
        initialSize: 5
        maxActive: 15
        minIdle: 5
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
        poolPreparedStatements: false
        #要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
        maxPoolPreparedStatementPerConnectionSize: -1
        validationQuery: select 'x'
        #单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法
        validationQueryTimeout: 60
        #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
        testOnBorrow: true
        # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
        testOnReturn: true
        #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
        testWhileIdle: true
        #连接保持空闲而不被驱逐的最小时间
        #minEvictableIdleTimeMillis:
        #物理连接初始化的时候执行的sql
        #connectionInitSqls:
        #当数据库抛出一些不可恢复的异常时,抛弃连接
        #exceptionSorter:
        #属性类型是字符串,通过别名的方式配置扩展插件,常用的有stat,wall,slf4j
        filters: stat,slf4j,wall
        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000

      primary: master
      strict: false
      datasource:
        #        基础默认数据库
        master:
          url: jdbc:mysql://ip:3306/shema?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&useTimezone=true&serverTimezone=GMT%2B8
          #连接数据库的用户名
          username: usrname
          #连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。
          password: FVF21nuP7Kqxtmsr6j0ZXWY/phsAcYJhN0FkYcKVjWBVkoFuJJ3Ib/nlA2BjikmBHUX8O4QOlwyMfQ1CDQx/4A==
          druid:
            initial-size: 10
            public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALropniRk4wOwosZklGLh95cd7wq2sdhBFOJzYNb/0sDGodEt967LstvSuy7yezn3ajYC9/+OB0/B3zIxjbZca0CAwEAAQ==

      
        dataSource2:
          url: jdbc:mysql://ip:3306/schema?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&useTimezone=true&serverTimezone=GMT%2B8
          #连接数据库的用户名
          username: username
          #连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。
          password: DN6HdJeWRivk5wVuoVkqg+OXH72corCNVsrCIGGQtt3t6b+HeMiFKwxlXKFvEIyNkbc3sTn0QzAKwhsFwhm0nA==
          druid:
            initial-size: 10
            public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ6IQ97Ih0EVLva2yi1PzfOyWg13LB6RDjjZ6IYU2ozuEKsvSegbcnPR/4riQpnMeVrDa9TeSg03hS4zJtv7foUCAwEAAQ==

        dataSource3:
          url: jdbc:mysql://ip:3306/shema?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&useTimezone=true&serverTimezone=GMT%2B8
          #连接数据库的用户名
          username: username
          #连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。
          password: DN6HdJeWRivk5wVuoVkqg+OXH72corCNVsrCIGGQtt3t6b+HeMiFKwxlXKFvEIyNkbc3sTn0QzAKwhsFwhm0nA==
          druid:
            initial-size: 10
            public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ6IQ97Ih0EVLva2yi1PzfOyWg13LB6RDjjZ6IYU2ozuEKsvSegbcnPR/4riQpnMeVrDa9TeSg03hS4zJtv7foUCAwEAAQ==



mybatis:
  configuration:
    map-underscore-to-camel-case: true


#  flyway:
#    #    暂不开启
#    enabled: false
#    encoding: UTF-8
#    locations: ["classpath:db/migration"]

之前使用明文密码的时候,没有password下边这一段配置的

 现在把这段配置加上,然后把明文的密码替换成加密后的密码字符串

接下来介绍如何生成加密的密码字符串以及生成公钥和私钥

首先找到druid的jar包在本地maven库的位置:

比如我的是在这个地址:

然后在地址栏输入powershell回车,打开powershell程序

打开的powershell会自动定位到当前的目录位置

 

然后输入命令

java -cp druid-1.1.22.jar com.alibaba.druid.filter.config.ConfigTools xiaomifeng1010

 比如 xiaomifeng1010是你的最初的原始密码

 回车后,就会生成加密后的密码字符串以及公钥和私钥

然后我们把最下边的password字符串和publicKey的值复制到配置文件中就可以了

然后再重新启动项目,发现是可以正常启动的,druid会自动根据你的加密字符串和公钥自动解密密码为原始密码xiaomifeng1010,其他的不用修改,直接默认使用druid的加解密方法就可以了,还是很简单易用的

注意在每个数据源单独配置initail-size的时候,数量不能超过全局的配置的最大激活数量

最上边单独配置druid的地方也有一个初始化数量和最大激活数量

所以如果下边的每个单独数据源设置initial-size=20,启动项目则会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值