我正在尝试使用AWS Secrets Manager来存储springboot微服务的机密。我可以配置所有内容,并且可以看到启动时应用程序正在加载一个秘密信息,以我为例,它是一个json文档。特别是我正在使用
'org.springframework.cloud:spring-cloud-starter-aws-secrets-manager-config:2.2.1.RELEASE'
[因为我注意到AwsSecretsManagerPropertySource能够将响应json解析为对象映射,所以我尝试使用嵌套结构作为秘密,但是如果我尝试使用@Value注释注入json的任何字段,则转换失败例外。因此,如果我的秘密是仅包含字符串作为字段的json,则可以注入它们。例如:
{
"a.b":"value"
...
}
使用中
@Value("${a.b}")
String field;
它很好,但是如果我有一个秘密,例如
{
"a": {
"b":"value"
}
我看到json已成功解析,但是使用了注释
@Value("${a.b}")
String field;
我无法检索字段,并且如果尝试类似的操作
@Value("${a}")
Map<String, String> field;
由于转换问题(无法从LinkedHashMap转换为字符串)而失败。有什么办法可以将嵌套结构处理成秘密,还是应该只使用没有嵌套对象的json?非常感谢!
经过几次尝试,我便能够访问从AWS Secret Manager检索的地图/列表,将Environment对象注入配置并调用:
@Configuration
public class MyConfigurationClass {
@Autowired
Environment environment;
@Bean
public MyBean myBean() {
List sites = environment.getProperty("sites", List.class);
...
}