当前位置:   article > 正文

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

druid enc

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

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

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

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  4. <version>3.5.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.baomidou</groupId>
  8. <artifactId>mybatis-plus-boot-starter</artifactId>
  9. <version>3.5.1</version>
  10. </dependency>
  11. <!-- 引入druid数据库连接池 -->
  12. <dependency>
  13. <groupId>com.alibaba</groupId>
  14. <artifactId>druid-spring-boot-starter</artifactId>
  15. <version>1.1.22</version>
  16. </dependency>
  17. <!-- 引入Mysql Jdbc驱动 -->
  18. <dependency>
  19. <groupId>mysql</groupId>
  20. <artifactId>mysql-connector-java</artifactId>
  21. <version>8.0.28</version>
  22. <scope>runtime</scope>
  23. </dependency>

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

  1. spring:
  2. datasource:
  3. dynamic:
  4. druid:
  5. # 连接池的配置信息
  6. # 初始化大小,最小,最大
  7. initialSize: 5
  8. maxActive: 15
  9. minIdle: 5
  10. # 配置获取连接等待超时的时间
  11. maxWait: 60000
  12. # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
  13. poolPreparedStatements: false
  14. #要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
  15. maxPoolPreparedStatementPerConnectionSize: -1
  16. validationQuery: select 'x'
  17. #单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法
  18. validationQueryTimeout: 60
  19. #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
  20. testOnBorrow: true
  21. # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
  22. testOnReturn: true
  23. #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
  24. testWhileIdle: true
  25. #连接保持空闲而不被驱逐的最小时间
  26. #minEvictableIdleTimeMillis:
  27. #物理连接初始化的时候执行的sql
  28. #connectionInitSqls:
  29. #当数据库抛出一些不可恢复的异常时,抛弃连接
  30. #exceptionSorter:
  31. #属性类型是字符串,通过别名的方式配置扩展插件,常用的有stat,wall,slf4j
  32. filters: stat,slf4j,wall
  33. # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
  34. connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
  35. primary: master
  36. strict: false
  37. datasource:
  38. # 基础默认数据库
  39. master:
  40. url: jdbc:mysql://ip:3306/shema?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&useTimezone=true&serverTimezone=GMT%2B8
  41. #连接数据库的用户名
  42. username: usrname
  43. #连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。
  44. password: FVF21nuP7Kqxtmsr6j0ZXWY/phsAcYJhN0FkYcKVjWBVkoFuJJ3Ib/nlA2BjikmBHUX8O4QOlwyMfQ1CDQx/4A==
  45. druid:
  46. initial-size: 10
  47. public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALropniRk4wOwosZklGLh95cd7wq2sdhBFOJzYNb/0sDGodEt967LstvSuy7yezn3ajYC9/+OB0/B3zIxjbZca0CAwEAAQ==
  48. dataSource2:
  49. url: jdbc:mysql://ip:3306/schema?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&useTimezone=true&serverTimezone=GMT%2B8
  50. #连接数据库的用户名
  51. username: username
  52. #连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。
  53. password: DN6HdJeWRivk5wVuoVkqg+OXH72corCNVsrCIGGQtt3t6b+HeMiFKwxlXKFvEIyNkbc3sTn0QzAKwhsFwhm0nA==
  54. druid:
  55. initial-size: 10
  56. public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ6IQ97Ih0EVLva2yi1PzfOyWg13LB6RDjjZ6IYU2ozuEKsvSegbcnPR/4riQpnMeVrDa9TeSg03hS4zJtv7foUCAwEAAQ==
  57. dataSource3:
  58. url: jdbc:mysql://ip:3306/shema?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&useTimezone=true&serverTimezone=GMT%2B8
  59. #连接数据库的用户名
  60. username: username
  61. #连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。
  62. password: DN6HdJeWRivk5wVuoVkqg+OXH72corCNVsrCIGGQtt3t6b+HeMiFKwxlXKFvEIyNkbc3sTn0QzAKwhsFwhm0nA==
  63. druid:
  64. initial-size: 10
  65. public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ6IQ97Ih0EVLva2yi1PzfOyWg13LB6RDjjZ6IYU2ozuEKsvSegbcnPR/4riQpnMeVrDa9TeSg03hS4zJtv7foUCAwEAAQ==
  66. mybatis:
  67. configuration:
  68. map-underscore-to-camel-case: true
  69. # flyway:
  70. # # 暂不开启
  71. # enabled: false
  72. # encoding: UTF-8
  73. # 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,启动项目则会报错

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/844141
推荐阅读
相关标签
  

闽ICP备14008679号