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

标签 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 服务器?

最佳答案

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

  • 只能由指定的 O/S 用户(或 root)读取
  • 你不会不小心搞砸文件权限(如果将密码放在文件中)
  • 您不会不小心将密码 checkin 源代码管理(这在开源中尤为重要)
  • 在重启后幸存下来
  • 环境变量在大多数语言中都很容易阅读
  • 确保你没有将你的envars发送给子进程

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

在Tomcat中,你可以在配置文件中使用Ant风格的变量替换,例如:

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

你不能直接使用操作系统环境变量(我认为......)。

要使用操作系统环境变量,你可以把

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 配置文件中直接使用操作系统环境变量。

关于git - 如何防止在 tomcat 的 context.xml 中存储 postgres 密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22582558/

相关文章:

java - MismatchedTokenException : expecting "set", 发现 '='

java - 如何从AWS elasticbeanstalk获取环境变量到pom文件

git status --ignored 无限期挂起

git - 并发git pull 到同一个本地存储库

django - 查询 Django 模型的 JSONField 的内容

PostgreSQL 性能 - SELECT 与存储函数

tomcat - 简单的 Tomcat 问题 在 Webapps 文件夹下创建一个新文件夹

java - ServletContext.getRealPath() 是否适用于网络片段?

git - 在网站上使用 git 源代码管理

Git refs - 为什么它被称为头而不是分支?