如何防止在tomcat context.xml中存储postgres密码

时间:2014-03-22 19:38:56

标签: git postgresql tomcat

在我的应用程序中,我在src / main / tomcat / conf中有context.xml文件,其中包含以下信息:

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <Resource
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            name="jdbc/tomcatDataSource"
            auth="Container"
            type="javax.sql.DataSource"
            initialSize="1"
            maxActive="20"
            maxIdle="3"
            minIdle="1"
            maxWait="5000"
            username="postgres"
            password="postgres"
            driverClassName="org.postgresql.Driver"
            validationQuery="SELECT 'OK'"
            testWhileIdle="true"
            testOnBorrow="true"
            numTestsPerEvictionRun="5"
            timeBetweenEvictionRunsMillis="30000"
            minEvictableIdleTimeMillis="60000"
            url="jdbc:postgresql://localhost:5432/tradebook_db" />

</Context>

每个开发人员在他的计算机上都有自己的postgres服务器,所以我猜这个用户名和密码的信息不应该放在git仓库中。将此context.xml文件添加到repo之后,我应该将它放在.gitignore中,以便每个开发人员都有他的特定用户和密码吗?或者还有其他方法可以防止将密码输入到存储库中的postgres服务器吗?

1 个答案:

答案 0 :(得分:0)

您应始终将应用程序密码放在O / S环境变量(envvars)中。

  • 只能由分配的操作系统用户(或根目录)读取
  • 您不会意外地搞砸文件权限(如果将密码放入文件中)
  • 您不会意外地将密码检查到源代码管理中(这在开源中尤为重要)
  • Survives重新启动
  • envvars易于阅读大多数语言
  • 确保您不会将您的envars发送给儿童过程

您应遵循最小权限原则,并以自己的用户身份运行您的Web服务器。

在Tomcat中,您可以在配置文件中使用Ant样式的变量替换,例如:

<some-setting>${someJavaSystemProperty}</some-setting>

您无法直接使用OS环境变量(我认为......)。

要使用OS环境变量,您可以输入

set "CATALINA_OPTS=-DsomeJavaSystemProperty=%SOME_OS_ENVIRONMENT_VARIABLE%"

bin/setenv.bat中(或类似地在bin/setenv.sh中为* nix)。您可能需要创建该文件。

http://tomcat.apache.org/tomcat-7.0-doc/config/

如果使用Spring,则可以使用context:property-placeholder直接在spring配置文件中使用OS envvars。