Зашифрованные свойства в Cloud Foundry с помощью Sping Boot

У меня есть приложение Spring Boot, в файле свойств которого есть зашифрованные значения, например. spring.security.user.password=ENC(ZUkuSkFAiu/k7v7G1538ouQmuSWeAuOucAVuvxLCDwwJ0mgnIdfl3N/RgiZMGeBm) Я использую jasypt, чтобы расшифровывать их на лету. Это отлично работает локально.

Однако, когда я развертываю приложение в Cloud Foundry, мой файл свойств теперь извлекает значение из переменных vcap env. например spring.security.user.password=${vcap.services.myconfig.credentials.user.password}

в PCF значение добавляется как

user.password = ENC(ZUkuSkFAiu/k7v7G1538ouQmuSWeAuOucAVuvxLCDwwJ0mgnIdfl3N/RgiZMGeBm)

Однако теперь мое приложение не запускается, и я получаю сообщение об ошибке

ОШИБКА 22 --- [основная] o.s.b.web.embedded.tomcat.TomcatStarter: Ошибка при запуске контекста Tomcat. Исключение: org.springframework.beans.factory.UnsatisfiedDependencyException. Сообщение: Ошибка создания bean-компонента с именем securityFilterChainRegistration, определенным в ресурсе пути к классу [org / springframework / boot / autoconfigure / security / servlet / SecurityFilterAutoConfiguration.class]: неудовлетворенная зависимость, выраженная через параметр 0 метода securityFilterChainRegistration; вложенное исключение - org.springframework.boot.context.properties.ConfigurationPropertiesBindException: ошибка при создании bean-компонента с именем «spring.security-org.springframework.boot.autoconfigure.security.SecurityProperties»: не удалось привязать свойства к «SecurityProperties»: prefix = spring .security, ignoreInvalidFields = false, ignoreUnknownFields = true; вложенное исключение - org.springframework.boot.context.properties.bind.BindException: не удалось привязать свойства в 'spring.security.user.password' к java.lang.String

Есть ли причина, по которой мне не хватает, почему это работает локально, но не в Cloud Foundry?

ОБНОВИТЬ

cf env returns ...

    
System-Provided:
{
 "VCAP_SERVICES": {
  "user-provided": [
   {
    "binding_name": null,
    "credentials": {
     "JAVA_OPTS": "-Dspring.security.user.password=ENC\\\\(ZUkuSkFAiu/k7v7G1538ouQmuSWeAuOucAVuvxLCDwwJ0mgnIdfl3N/RgiZMGeBm\\\\)",
     "user.password": "ENC(ZUkuSkFAiu/k7v7G1538ouQmuSWeAuOucAVuvxLCDwwJ0mgnIdfl3N/RgiZMGeBm)"
    },
    "instance_name": "myconfig",
    "label": "user-provided",
    "name": "myconfig",
    "syslog_drain_url": "",
    "tags": [],
    "volume_mounts": []
   }
  ]
 }
}

где это засевает версию JAVA_OPTS, которая работает, а также свойство user.password, которое не разрешает


person Craig    schedule 12.03.2021    source источник
comment
Как вы добавляете user.password в CF? Вы пользуетесь услугами, предоставляемыми пользователями? Если да, то как вы это создаете и можете ли вы включить очищенную версию cf env для своего приложения?   -  person Daniel Mikusa    schedule 16.03.2021
comment
см. обновление выше   -  person Craig    schedule 16.03.2021
comment
это не работает в application-pcf.yaml spring.security.user.password = ENC ($ {vcap.services.myconfig.credentials.user.password}) ??   -  person Tatha    schedule 16.03.2021
comment
Татха, нет, это тоже не решает   -  person Craig    schedule 16.03.2021
comment
Часть меня задается вопросом, есть ли проблема с . в имени ключа и как это сглаживается. Я бы посоветовал вам попробовать пару вещей. 1.) удалите точку, поэтому используйте что-то вроде userPassword и посмотрите, сработает ли это, поэтому ${vcap.services.myconfig.credentials.userPassword}, а также попробуйте просто подключить ${vcap.services.myconfig.credentials.userPassword} к чему-нибудь в вашем приложении, которое просто будет регистрировать полученное значение. Если вы видите значение, это может дать некоторые подсказки, почему он не может связываться.   -  person Daniel Mikusa    schedule 17.03.2021
comment
Вы должны иметь возможность ссылаться на них с помощью ${vcap.services.service-name.credentials.<key>}, однако см. stackoverflow.com/a/52235792/1585136. Вы также можете посмотреть github.com/pivotal-cf/java-cfenv, в котором есть более надежный способ извлечения значений из связанных сервисов.   -  person Daniel Mikusa    schedule 17.03.2021


Ответы (1)


Попробуйте это один раз:

JAVA_OPTS=-Dspring.security.user.password=ENC\\(ZUkuSkFAiu/k7v7G1538ouQmuSWeAuOucAVuvxLCDwwJ0mgnIdfl3N/RgiZMGeBm\\)
person arjain13    schedule 14.03.2021
comment
Спасибо, это работает. Я все еще не понимаю, в чем проблема с облачными переменными среды литейного производства. Я попытался избежать скобок так же, как и ваш ответ. Я больше не получаю исходную ошибку, но учетные данные не принимаются, когда меня продвигают в моем приложении. - person Craig; 15.03.2021