Я пишу секрет в Vault, похожий на secret1=test1\ntest2
, и использую его в конфигурации приложения Spring Boot, используя @Value("${secret1}")
. Однако при успешном извлечении из Vault через Spring Cloud Config Server значение secret1
превращается в test1**\\n**test1
. Поэтому добавляется дополнительная обратная косая черта. Это очень небольшое изменение, которое мне нужно было бы сделать в приложении, чтобы удалить эту дополнительную обратную косую черту, но я хотел бы решить эту проблему правильно. Как я могу предотвратить добавление этой дополнительной обратной косой черты?
Да, в самом деле. Фактический возвращаемый результат — test1\\ntest1. Обратите внимание на двойную обратную косую черту \\.
Само хранилище не будет связываться с \n
. Попробуйте это в командной строке:
vault kv put secret/new-line secret1 = "test1\ntest2"
По сети он будет отправлен в виде этого JSON:
{
"data":{
"secret": "test1\\ntest2"
}
}
И возвращение секрета приносит ту же ценность:
vault kv get --field data secret/new-line
map[secret:test1\ntest2]
Ваш \n
, вероятно, интерпретируется, поскольку он преобразуется в JSON и отправляется в Vault. Может быть, то, что помещает секрет в Vault, не использует ту же библиотеку/технологию, что и ваш код?
Убедитесь, что вы избегаете \n
, когда он сохраняется в Vault. Получение этого вернет \n
невредимым.
Итак... мой плохой. Проблема действительно заключалась в том, что при приеме в Vault добавлялась двойная обратная косая черта, и поэтому простое экранирование перед сохранением в Vault сработало.
Я предполагаю, что
**
— это просто форматирование, которое вы добавили, чтобы подчеркнуть проблему, верно?