11.7.2. 安全保护

该最佳实践基于前面一小节。在项目profile,当environment.type等于'dev'时被激活中,production profile不包含database.password属性。我特地这么做是为了说明一个概念:将秘密信息放到你的用户特定的settings.xml文件中。如果你在一个大型组织中开发一个应用,那么很可能开发小组的大部分人不知道产品数据库的密码。如果一个组织的开发小组和运营小组有明确的界限的话,这种安全保护就很常见了。开发人员可以访问开发环境和staging环境,但是它们往往不被允许访问产品数据库。为什么要这么做有很多原因,尤其是当一个组织处理异常敏感的经济,情报,或者医疗信息的时候。在这样的情况下,产品环境构建只能有开发者领导或者产品运营小组成员执行。当它们使用environment.type的时候,它们会需要在settings.xml在中定义如下变量。

Example 11.11. 在用户特定Settings Profile中存储秘密信息

<settings>
  <profiles>
    <profile>
      <activeByDefault>true</activeByDefault>
      <properties>
        <environment.type>prod</environment.type>
        <database.password>m1ss10nimp0ss1bl3</database.password>
      </properties>
    </profile>
  </profiles>
</settings>

这个用户定义了一个默认profile,将environment.type设置成prod,同时也设置了产品数据库密码。当项目构建的时候,production profile由environment.type属性激活,并且database.password属性也被填充。这样,你就可以将所有产品项目的配置放到项目的pom.xml中,而不用在那里配置访问产品数据库必要的秘密信息。

Note

秘密信息通常会和可移植性冲突,但这是合理的。你不会想公开你的秘密信息。