renren-fast 想给数据库密码加密,应该如何操作?

提问 8 1519
Rookie
Rookie 2018-12-11
版本:renren-fast 2.1.0 开发环境:
最近想在配置数据源时给密码加密,按照网上配置了不行,请问应该如何操作?
回帖
  • 我们使用的是druid,可以看下druid的教程
    0 回复
  • Rookie
    Rookie (楼主)
    2018-12-11
    @Mark 就是看了druid 提供的方法都试了 还是不行,不知道是不是多数据源的影响呢?
    0 回复
  • jclazz
    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]
    0 回复
  • Rookie
    Rookie (楼主)
    2019-01-23
    @jclazz 用的renren-fast 不知道哪里设置呢
    0 回复
  • Rookie
    Rookie (楼主)
    2019-01-23
    @jclazz img[//cdn.renren.io/56d22201901232230227700.png] 这样配置了还是不行
    0 回复
  • Rookie
    Rookie (楼主)
    2019-05-01
    @jclazz 按照你这个搞了 也不行 很奇怪
    0 回复
  • Rookie
    Rookie (楼主)
    2019-05-01
    @jclazz 我发现配置了 使用明文密码是可以成功的,相当于配置加密没生效
    0 回复
  • jclazz
    2019-05-06
    兄弟,肯定可以的,我们的项目是银行项目,已经过了UAT了。 你自己调试一下吧。
    0 回复