第 4 章 如何在 Spring Boot 中使用加密属性占位符

在保护容器时,不建议在配置文件中使用纯文本密码。避免使用纯文本密码的一种方法是尽可能使用加密属性占位符。

4.1. 关于用于加密值的 master 密码

要使用 Jasypt 加密值,需要一个 master 密码。供您或管理员选择 master 密码。Jasypt 提供了多种方式来设置 master 密码。Jasypt 可以集成到 Spring 配置框架中,以便在加载配置文件时解密属性值。其中一种方法是在 Spring 引导配置中以纯文本形式指定 master 密码。

Spring 使用 PropertyPlaceholder 框架将令牌替换为属性文件中的值,Jasypt 的方法将 PropertyPlaceholderConfigurer 类替换为可识别加密字符串并解密它们的方法。

示例

<bean id="propertyPlaceholderConfigurer"
      class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
  <constructor-arg ref="configurationEncryptor" />
  <property name="location" value="/WEB-INF/application.properties" />
</bean>

<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
  <property name="config" ref="environmentVariablesConfiguration" />
</bean>

<bean id="environmentVariablesConfiguration"
      class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
  <property name="algorithm" value="PBEWithMD5AndDES" />
  <property name="password" value="myPassword" />
</bean>

您可以使用环境变量来设置 master 密码,而不是以纯文本形式指定 master 密码。在 Spring Boot 配置文件中,将这个环境变量指定为 passwordEnvName 属性的值。例如,如果您将 MASTER_PW 环境变量设置为 master 密码,则 Spring Boot 配置文件中会具有此条目:

<property name="passwordEnvName" value="MASTER_PW">