micronaut 多数据源加密密码
micronaut multiple datasource encypted password
我创建了一个 micronaut 应用程序,它可以通过 jdbctemplate 访问多个数据源。我像这样配置了 jdbctemplates:
@Factory
@Requires(beans = DatasourceFactory.class)
public class JdbcTemplateFactory {
@Context
@EachBean(DataSource.class)
JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
这使用 io.micronaut.configuration.jdbc.tomcat.DatasourceFactory
消耗我的配置 yml:
datasources:
datasource111111:
url: url
username: username
password: password
driverClassName: org.h2.Driver
datasource222222:
url: url
username: username
password: password
driverClassName: org.h2.Driver
问题是我想以某种方式解密来自配置的密码。我的第一次尝试是 "replace" 工厂正在使用的 DatasourceConfiguration
bean 但没有运气,它给了我一个没有意义的错误 (io.micronaut.context.exceptions.DependencyInjectionException)。
这是我的替换尝试:
@Replaces(DatasourceConfiguration.class)
@EachProperty(value = BasicJdbcConfiguration.PREFIX, primary = "default")
public class EncryptedDatasourceConfiguration extends DatasourceConfiguration {
public EncryptedDatasourceConfiguration(String name) {
super(name);
}
@Override
public String getPassword() {
return "encrypted password";
}
}
知道我做错了什么吗??谢谢!
回答:
必须按照建议听 bean 创建
@Singleton
public class DatasourceInitiliazer implements BeanCreatedEventListener<DatasourceConfiguration> {
@Override
public DatasourceConfiguration onCreated(BeanCreatedEvent<DatasourceConfiguration> event) {
final DatasourceConfiguration datasource = event.getBean();
datasource.setPassword("encryptedPassword");
return datasource;
}
}
您最好创建一个 BeanCreatedEventListener
来读取密码、解密密码并将其重新设置到配置中
我创建了一个 micronaut 应用程序,它可以通过 jdbctemplate 访问多个数据源。我像这样配置了 jdbctemplates:
@Factory
@Requires(beans = DatasourceFactory.class)
public class JdbcTemplateFactory {
@Context
@EachBean(DataSource.class)
JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
这使用 io.micronaut.configuration.jdbc.tomcat.DatasourceFactory
消耗我的配置 yml:
datasources:
datasource111111:
url: url
username: username
password: password
driverClassName: org.h2.Driver
datasource222222:
url: url
username: username
password: password
driverClassName: org.h2.Driver
问题是我想以某种方式解密来自配置的密码。我的第一次尝试是 "replace" 工厂正在使用的 DatasourceConfiguration
bean 但没有运气,它给了我一个没有意义的错误 (io.micronaut.context.exceptions.DependencyInjectionException)。
这是我的替换尝试:
@Replaces(DatasourceConfiguration.class)
@EachProperty(value = BasicJdbcConfiguration.PREFIX, primary = "default")
public class EncryptedDatasourceConfiguration extends DatasourceConfiguration {
public EncryptedDatasourceConfiguration(String name) {
super(name);
}
@Override
public String getPassword() {
return "encrypted password";
}
}
知道我做错了什么吗??谢谢!
回答: 必须按照建议听 bean 创建
@Singleton
public class DatasourceInitiliazer implements BeanCreatedEventListener<DatasourceConfiguration> {
@Override
public DatasourceConfiguration onCreated(BeanCreatedEvent<DatasourceConfiguration> event) {
final DatasourceConfiguration datasource = event.getBean();
datasource.setPassword("encryptedPassword");
return datasource;
}
}
您最好创建一个 BeanCreatedEventListener
来读取密码、解密密码并将其重新设置到配置中