Spring Cloud Config Server возвращает дополнительную обратную косую черту

Я пишу секрет в Vault, похожий на secret1=test1\ntest2, и использую его в конфигурации приложения Spring Boot, используя @Value("${secret1}"). Однако при успешном извлечении из Vault через Spring Cloud Config Server значение secret1 превращается в test1**\\n**test1. Поэтому добавляется дополнительная обратная косая черта. Это очень небольшое изменение, которое мне нужно было бы сделать в приложении, чтобы удалить эту дополнительную обратную косую черту, но я хотел бы решить эту проблему правильно. Как я могу предотвратить добавление этой дополнительной обратной косой черты?

Я предполагаю, что ** — это просто форматирование, которое вы добавили, чтобы подчеркнуть проблему, верно?

ixe013 18.03.2022 14:55

Да, в самом деле. Фактический возвращаемый результат — test1\\ntest1. Обратите внимание на двойную обратную косую черту \\.

Charles 18.03.2022 15:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
1
2
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Само хранилище не будет связываться с \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 сработало.

Charles 22.03.2022 21:51

Другие вопросы по теме