springboot使用druid对配置文件数据库密码进行加密(starter版)

前言

最近一直在学习springboot和springcloud,自己把一些案例代码给上传到github上,这个时候发现一个问题:我配置文件中数据库相关配置信息(数据库用户名,主机和数据库密码)不就直接给暴露出去了吗,对于这个问题,如果真的在开发中肯定是不允许的。为此查阅了一些资料,目前是有两种解决方案:
1.使用jasyp库
这种方法我在测试的时候运到一个问题,找不到解决方案,具体问题:在项目启动时报错:Failed to bind properties under ‘spring.datasource.password’ to java.lang.String‘,有可能是版本问题,大家有兴趣可以自己去查询资料尝试。
2.使用druid自带的密码加密功能
我是直接参考github官方文档去操作的:https://github.com/alibaba/druid/wiki/如何在Spring-Boot中配置数据库密码加密?

操作步骤

1.导入依赖包:版本可以按自己需要

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid-spring-boot-starter</artifactId>
     <version>1.1.20</version>
</dependency>
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>8.0.18</version>
 </dependency>

2.进入maven仓库找到druid-1.1.20.jar,进入cmd执行命令

java -cp druid-1.1.20.jar com.alibaba.druid.filter.config.ConfigTools  你的数据库密码

在这里插入图片描述
执行完后会在控制台打印加密后的密码以及公钥私钥字符串,记得保存下来

3.在项目文件中配置
(1)properties配置

server.port=8080

publicKey=上面生成的公钥字符串

spring.application.name=CLOUD-DEPT-SERVER
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=上面生成的加密后的密码
spring.datasource.druid.url=jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-wait=60000
spring.datasource.druid.max-active=20
spring.datasource.druid.filter.config.enabled=true
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${publickey}

(2)yml配置

spring:
  application:
    name: CLOUD-DEPT-SERVER
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
      username: root
      password: 上面生成的加密后的密码
      initial-size: 5
      max-active: 20
      max-wait: 60000
      min-idle: 5
      filter:
        config:
          enabled: true
      # 这里有个坑
      connect-properties: {config.decrypt: true,config.decrypt.key: 上面生成的公钥字符串}

这里操作的时候我遇到一个问题:当使用yml配置文件后,启动就会报错Access denied for user ‘root’@‘localhost’ (using password: YES),排查后发现不是密码和数据库的问题,将yml换成properties又运行正常,最后找了半天是github官方文档没更新,配置connect-properties的时候要按上面的形式进行配置,这里大家需要注意一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章