赞
踩
之前写了一篇加密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,启动项目则会报错
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。