加密数据库操作

加密数据库操作

需求:在项目都完成之后,发现yaml配置里面的数据库账号密码都是明文的,为了安全起见,需要在不改动原有的代码基础上,完成加密操作

项目中使用的是hikari数据连接池(durid连接池是同样的操作,将第二步的继承对象改为duridDataSource就行)

原来配置:
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      max-lifetime: 2000000
      maximum-pool-size: 5
      minimum-idle: 3
      auto-commit: true
      connection-timeout: 30000
      username: ws
      password: 123456    //这里的MySQL密码都是明文,不安全
      jdbc-url: jdbc:mysql://localhost:3306/mmmma?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull

加密yaml明文密码
  1. 选择加密工具

    1. 这里我就直接省略了,自己找个EncryUtils就行
  2. 新建config类继承HikariDataSource,重写getPassword方法。

    1. public class DataSourceConfig extends HikariDataSource {
          private final Boolean encryption = true;
      
          @Override
          public String getPassword() {
              String oldPassword = super.getPassword();
              if (!encryption)
                  return oldPassword;
              if (null == oldPassword)
                  return null;
              try {
                  oldPassword = EncryptionUtils.decrypt(oldPassword);
                  return oldPassword;
              } catch (Exception e) {
                  throw new RuntimeException("数据库密码解密失败!", e);
              }
          }
      }
      
  3. 用新的config类生成datasource

    1. @Configuration
      public class HikariSource {
          @Bean(name = "dataSource")
          @Primary
          @ConfigurationProperties(ignoreUnknownFields = false,prefix="spring.datasource.hikari")
          public HikariDataSource hikariDataSource() {
              HikariDataSource dataSourceConfig = new DataSourceConfig();
              return dataSourceConfig;
          }
      }
      
  4. 重写编写yaml

    1. spring:
        datasource:
          type: com.zaxxer.hikari.HikariDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          hikari:
            max-lifetime: 2000000
            maximum-pool-size: 5
            minimum-idle: 3
            auto-commit: true
            connection-timeout: 30000
            username: ws
            password: 加密后字段xxxx    //这里的MySQL密码都是明文,不安全
            jdbc-url: jdbc:mysql://localhost:3306/mmmma?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
      
      
排错:
  • 经常会遇到加密之后,项目跑不起来,数据库连接错误
    • 通常的问题就是第三步的用新的config类生成datasource没有生效
    • 这边特别的要注意yaml的配置地址
    • 这边我们将数据库的userName password url都放在的spring.datasource.hikara的下面,这个要严格遵守,要不然@ConfigurationProperties(ignoreUnknownFields = false,prefix=“spring.datasource.hikari”)就会找不到配置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值