有没有办法在 Spring Boot 应用程序配置中使用 Spring Cloud cipher?

Posted

技术标签:

【中文标题】有没有办法在 Spring Boot 应用程序配置中使用 Spring Cloud cipher?【英文标题】:Is there a way to use Spring Cloud cipher in Spring Boot application config?有没有办法在 Spring Boot 应用程序配置中使用 Spring Cloud cipher? 【发布时间】:2015-04-09 20:53:13 【问题描述】:

我有一个使用 Spring Cloud Config 的 Spring Boot 应用程序,但我想在 Spring Boot 应用程序 bootstrap.yml 文件中加密 Spring Cloud Config 密码。有没有办法做到这一点?下面是一个例子。

Spring Boot 应用 bootstrap.yml

spring:
  cloud:
    config:
      uri: http://locahost:8888
      username: user
      password: 'cipherencryptedpassword'

【问题讨论】:

【参考方案1】:

我发现了一些与此相关的事情。

如果使用 bootstrap.yml(或 application.yml),密文格式必须用单引号括起来:

security.user.password: 'cipher56e611ce4a99ffd99908d2c9aa1461d831722812e4370a5b6900b7ea680ae914'  

如果你使用 bootstrap.properties(或 application.properties),密文的格式一定不能包含:

security.user.password= cipher56e611ce4a99ffd99908d2c9aa1461d831722812e4370a5b6900b7ea680ae914

[参考文档][1] 显示不带引号的 yml,我从来没有工作过。 SnakeYaml 总是报错:

"expected <block end>, but found Scalar"

【讨论】:

.properties 文件使用 =,而不是 ":"【参考方案2】:

您可以使用 Spring CLI 加密秘密 spring encrypt password --key 'SECRET_KEY'

https://cloud.spring.io/spring-cloud-cli/

【讨论】:

【参考方案3】:

配置客户端支持加密属性(如user guide 中所述)。显然,如果你这样做,你必须提供一个密钥来在运行时解密属性,所以实际上我并不总是看到好处(我想配置文件有点像一个特殊格式的密钥库,所以你只有一个秘密要保护,而不是许多)。示例(application.yml):

integration:
  stores:
    test: 'cipher316f8cdbb776c23e679bf209014788a6eab7522f48f97114328c2c9388e6b3c1'

和密钥(在 bootstrap.yml 中):

encrypt:
  key: $ENCRYPT_KEY: # deadbeef

【讨论】:

谢谢戴夫。我不确定我昨天做错了什么,但我无法让它发挥作用。我将 ENCRYPT_KEY 设置为操作系统环境变量。我今天又试了一次,它工作正常。 对于遇到相同问题的任何人,Intellij(可能还有其他 IDE)在启动期间会加载环境变量...因此要加载新的/更改的环境变量,需要关闭并重新启动 Intellij。

以上是关于有没有办法在 Spring Boot 应用程序配置中使用 Spring Cloud cipher?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Spring Boot 中获取所有配置属性的名称?

Spring Boot YAML 配置和列表

spring boot配置mybatis出现Invalid bound statement (not found)报错的解决办法

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

除了在 Spring Boot 应用程序的 bootstrap.properties 中指定之外,有没有办法为 Slueth 提供 Spring 应用程序名称?