【问题标题】:How to pass the DB AWS secret into tomcat context.xml?如何将 DB AWS 机密传递到 tomcat context.xml?
【发布时间】:2021-02-02 23:28:30
【问题描述】:

我有一个 context.xml 用于连接数据库。

<?xml version='1.0' encoding='utf-8'?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

<Resource name="jdbc/SS" 
        auth="Container"
        type="javax.sql.DataSource"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
        username="a***b"
        password="C********1"
        driverClassName="org.postgresql.Driver"
        url="jdbc:postgresql://**********:****/a***b"
        maxActive="100"
        maxIdle="50"
        minIdle="10"
        testWhileIdle="true"
        maxWait="30000"  
        maxAge="60000"
        removeAbandoned="true" 
        removeAbandonedTimeout="600" />
</Context>

我需要从秘密管理器获取数据库凭据,并通过替换硬编码的数据库凭据将值传递到 context.xml。

有什么办法可以做到吗?

【问题讨论】:

  • 你想用java代码修改xml吗?因为在 xml 中,你只需要硬编码。
  • 我需要从 XML 中删除硬编码的数据库凭据,并从秘密中获取数据库凭据并在 XML 中分配它
  • 然后,需要使用java代码来编辑xml
  • 怎么做?

标签: java postgresql tomcat aws-secrets-manager context.xml


【解决方案1】:

如果您想动态加载数据库凭据。可以只在 Tomcat 加载一次context.xml 时进行(因为 Tomcat 在启动时只读取一次环境变量)。

请注意,在运行时,每当contxt.xml 更改相关的 Web 应用程序时都会重新加载。 Tomcat 没有重启。

所以诀窍是将数据库凭据作为 JVM 参数/参数传递,就像上面的 ${catalina.base}

有3个阶段:

  1. 声明并设置环境变量的值:

    export DB_CREDENTIALS='*****'
    

    好地方是Tomcat的用户登录脚本.bash_profile,或者Tomcat环境setenv.sh

  2. 为环境变量创建JVM参数(系统变量):将以下行添加到setenv.sh最后一行之前。

    -Denvironment.db.credentials=${DB_CREDENTIALS} \
    
  3. 使用/调用 context.xml 中声明的 JVM 参数。例如:

    url="jdbc:postgresql://**********:****/${environment.db.credentials}"
    

【讨论】:

猜你喜欢
  • 2014-08-02
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 2014-04-24
相关资源
最近更新 更多