700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > springboot+druid+dynamic-datasource+mysql数据库密码加密

springboot+druid+dynamic-datasource+mysql数据库密码加密

时间:2021-10-14 12:54:12

相关推荐

springboot+druid+dynamic-datasource+mysql数据库密码加密

背景

生产环境中, 希望将数据库密码加密, 甚至用户名加密。druid自带了数据库密码加密功能。

springboot+druid-starter实现密码加密

获取公钥和加密密码。这里使用druid-start,官方有加密方法说明:GitHub wiki

简单总结下就是:在本地maven仓库找到druid的jar包, 然后在CMD窗口执行命令以下命令即可得到

java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools you_password

输出:

privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA6+4avFnQKP+O7bu5YnxWoOZjv3no4aFV558HTPDoXs6EGD0HP7RzzhGPOKmpLQ1BbA5viSht+aDdaxXp6SvtMQIDAQABAkAeQt4fBo4SlCTrDUcMANLDtIlax/I87oqsONOg5M2JS0jNSbZuAXDv7/YEGEtMKuIESBZh7pvVG8FV531/fyOZAiEA+POkE+QwVbUfGyeugR6IGvnt4yeOwkC3bUoATScsN98CIQDynBXC8YngDNwZ62QPX+ONpqCel6g8NO9VKC+ETaS87wIhAKRouxZL38PqfqV/WlZ5ZGd0YS9gA360IK8zbOmHEkO/AiEAsES3iuvzQNYXFL3x9Tm2GzT1fkSx9wx+12BbJcVD7AECIQCD3Tv9S+AgRhQoNcuaSDNluVrL/B/wOmJRLqaOVJLQGg==publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOvuGrxZ0Cj/ju27uWJ8VqDmY7956OGhVeefB0zw6F7OhBg9Bz+0c84RjzipqS0NQWwOb4kobfmg3WsV6ekr7TECAwEAAQ==password:PNak4Yui0+2Ft6JSoKBsgNPl+A033rdLhFw+L0np1o+HDRrCo9VkCuiiXviEMYwUgpHZUFxb2FpE0YmSguuRww==

在springboot application配置文件中添加一下内容

如果是application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=falsespring.datasource.username=root# 步骤一生成的password, 即就是密码密码spring.datasource.password=QNLWJMvsISqe85sel6w8lSjxis/JvJwnhA7BuqFAuMKJBysYZTVQqBQiOmdyJAiv6ulU2BPu0JeUU1wpWRoVrA==# 生成的公钥public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIj3KZDSeXpjJ0/cRoVXDvlvMCToCSxhZddVs8roF3Nq4/2I7MdmB7keqJstl+HcfYUtjrcclJFtpUZHzHbc14MCAwEAAQ==# 配置 connection-properties,启用加密,配置公钥。spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}# 启用ConfigFilterspring.datasource.druid.filter.config.enabled=true

如果是application.yml

# 步骤一生成的publicKey生成的公钥public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIj3KZDSeXpjJ0/cRoVXDvlvMCToCSxhZddVs8roF3Nq4/2I7MdmB7keqJstl+HcfYUtjrcclJFtpUZHzHbc14MCAwEAAQ==spring:datasource:url: jdbc:mysql://localhost:3306/mydb?useSSL=falseusername: root# 步骤一生成的password, 即就是密码密码password: QNLWJMvsISqe85sel6w8lSjxis/JvJwnhA7BuqFAuMKJBysYZTVQqBQiOmdyJAiv6ulU2BPu0JeUU1wpWRoVrA==driver-class-name: com.mysql.jdbc.Driverdruid:connection-properties: config.decrypt=true;config.decrypt.key=${public-key}filter:config:enabled: true

springboot+dynamic-datasource-starter实现密码加密

该框架自带加密 ENC()。官方地址 功能说明如图

经过查看源码发现, 该框架使用自带的加密工具类com.baomidou.dynamic.datasource.toolkit.CryptoUtils进行加解密, 且自带有公钥私钥, 所以直接使用此工具类加密我们的明文密码, 然后用ENC()包裹即可实现加解密。

具体操作:

调用加密方法

@Testvoid test() throws Exception {// 假如我们的密码为String root = CryptoUtils.encrypt("root");System.out.println(root);// 输出加密密码// VZamSTMi224AH6RUtJGXNldiDp/XEL2ozRhBUu/o9ChodT4JEb9kE......}

修改配置文件中的密码

spring:datasource:dynamic:primary: master #设置默认的数据源或者数据源组,默认值即为masterstrict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源datasource:master:url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=falseusername: root# 用ENC将密码包裹起来password: ENC(VZamSTMi224AH6RUtJGXNldiDp/XEL2ozRhBUu/o9ChodT4JEb9kE/....)druid:# 选填public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIj3KZDSeXpjJ0/cRoVXDvlvMCToCSxhZd....

通过查看源码还可以发现, 用户名/密码/数据库连接都可以使用此方法加密

// com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourcePropertypublic String getUrl() {return decrypt(url);}public String getUsername() {return decrypt(username);}public String getPassword() {return decrypt(password);}/*** 字符串解密*/private String decrypt(String cipherText) {if (StringUtils.hasText(cipherText)) {Matcher matcher = ENC_PATTERN.matcher(cipherText);if (matcher.find()) {try {return CryptoUtils.decrypt(publicKey, matcher.group(1));} catch (Exception e) {log.error("DynamicDataSourceProperties.decrypt error ", e);}}}return cipherText;}

结束

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。