在我的应用程序中,我在 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/