renren-fast 想给数据库密码加密,应该如何操作?
版本:renren-fast 2.1.0 |
开发环境: |
最近想在配置数据源时给密码加密,按照网上配置了不行,请问应该如何操作?
-
2018-12-11
我们使用的是druid,可以看下druid的教程
-
2018-12-11
@Mark 就是看了druid 提供的方法都试了 还是不行,不知道是不是多数据源的影响呢?
-
2019-01-25
以前处理过,好像是因为多数据源的情况下,配置信息的前缀变了导致druid取不到配置信息,解决办法是DruidDataSource创建后,调用setConnectProperties方法,把ConfigFilter.CONFIG_DECRYPT,ConfigFilter.CONFIG_KEY,ConfigFilter.CONFIG_FILE参数自己传进去就行了。
[hr]
@Rookie 貌似只能一个帖子只能回复一次,我只好回复到这里了。
我的项目不是renren-fast,但是原理是一样的,下面是主要代码,你参考一下吧。
DruidConfig.java
[pre]
@Slf4j
@Configuration
public class DruidConfig {
@Autowired
private DruidConfigFilterProperties druidConfigFilterProperties;
@ConfigurationProperties("spring.datasource.druid.master")
public DataSource masterDataSource() {
DruidDataSource ds = DruidDataSourceBuilder.create().build();
final DruidConfigFilterProperties.Config filterConfig = druidConfigFilterProperties.getDatasource()
.getOrDefault("master", null);
if (filterConfig != null && filterConfig.getEnableDecrypt()) {
log.info("password for master datasource need decrypt");
ds.setConnectProperties(createConnectionProperties(filterConfig));
}
return ds;
}
@ConfigurationProperties("spring.datasource.druid.slave")
@ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")
public DataSource slaveDataSource() {
DruidDataSource ds = DruidDataSourceBuilder.create().build();
final DruidConfigFilterProperties.Config filterConfig = druidConfigFilterProperties.getDatasource()
.getOrDefault("slave", null);
if (filterConfig != null && filterConfig.getEnableDecrypt()) {
log.info("password for slave datasource need decrypt");
ds.setConnectProperties(createConnectionProperties(filterConfig));
}
return ds;
}
@Bean(name = "dynamicDataSource")
@Primary
public DynamicDataSource dataSource(DataSource masterDataSource, DataSource slaveDataSource) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);
targetDataSources.put(DataSourceType.SLAVE.name(), slaveDataSource);
return new DynamicDataSource(masterDataSource, targetDataSources);
}
private Properties createConnectionProperties(DruidConfigFilterProperties.Config config) {
Properties connectionProperties = new Properties();
Optional.ofNullable(config.getEnableDecrypt())
.ifPresent(o -> connectionProperties.setProperty(ConfigFilter.CONFIG_DECRYPT, Boolean.toString(o)));
Optional.ofNullable(config.getDecryptKey())
.ifPresent(o -> connectionProperties.setProperty(ConfigFilter.CONFIG_KEY, o));
Optional.ofNullable(config.getFile())
.ifPresent(o -> connectionProperties.setProperty(ConfigFilter.CONFIG_FILE, o));
return connectionProperties;
}
@Component
@ConfigurationProperties(prefix = "druid-config-filter")
public static class DruidConfigFilterProperties {
private Map<String, DruidConfigFilterProperties.Config> datasource = Collections.emptyMap();
public Map<String, Config> getDatasource() {
return datasource;
}
public void setDatasource(Map<String, Config> datasource) {
this.datasource = datasource;
}
public static class Config {
private String file;
private Boolean enableDecrypt;
private String decryptKey;
public String getFile() {
return file;
}
public void setFile(String file) {
this.file = file;
}
public Boolean getEnableDecrypt() {
return enableDecrypt;
}
public void setEnableDecrypt(Boolean enableDecrypt) {
this.enableDecrypt = enableDecrypt;
}
public String getDecryptKey() {
return decryptKey;
}
public void setDecryptKey(String decryptKey) {
this.decryptKey = decryptKey;
}
}
}
}
[/pre]
application.yml
[pre]
# 数据库密码解密配置
druid-config-filter:
datasource:
# 主库
master:
# 开启加密,不要忘了将原来的密码换成密文!
enableDecrypt: false
# 加密的公钥(数据库密码)
decryptKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMgzEf8Ifr2qBGXpfqKUz/20FPUaA8vcgiBz6iOtC1FsOJ9N5Wu70DeQawOGBslrymSGMoS8Twh8ik7U0XEFyUMCAwEAAQ==
# 从另外一个文件中读取解密信息,支持本机文件和http远程下线
# 本机文件的写法 file:///home/test/my.properties
# 远程文件写法 http://xxxxx
# 文件内容需只需两行:`config.decrypt=true`,`config.decrypt.key=密钥字符串`
# 如果配置了decryptKey,file方式无效
file:
# 从库,配置参数雷同,此处省略
slave:
enableDecrypt: false
decryptKey: 这里填公钥
file:
[/pre]
-
2019-01-23
@jclazz 用的renren-fast 不知道哪里设置呢
-
2019-01-23
@jclazz img[//cdn.renren.io/56d22201901232230227700.png] 这样配置了还是不行
-
2019-05-01
@jclazz 按照你这个搞了 也不行 很奇怪
-
2019-05-01
@jclazz 我发现配置了 使用明文密码是可以成功的,相当于配置加密没生效
-
2019-05-06
兄弟,肯定可以的,我们的项目是银行项目,已经过了UAT了。
你自己调试一下吧。