部署后更改 web.xml

Posted

技术标签:

【中文标题】部署后更改 web.xml【英文标题】:Change web.xml after deployment 【发布时间】:2013-02-04 23:55:38 【问题描述】:

是否建议在部署后更改应用服务器中的 web.xml(或者实际上是任何其他文件)?是否所有应用服务器都会公开其部署/目录结构?

我更愿意在本地进行更改,重新构建 war(或 .ear 等),然后重新部署应用程序。

【问题讨论】:

【参考方案1】:

关于您的第一个问题,这取决于资源的类型。对于类路径资源,您可以覆盖在应用程序服务器的类加载机制中具有更高优先级的任何目录中的文件(例如,如果您使用的是 Tomcat,则为 $CATALINA_HOME/lib)。对于 xml 文件,如 web.xml,您可以在打包文件中声明一个具有绝对路径的外部实体,但您必须确保该文件将出现在目标服务器上。例如,您打包的 web.xml 可能如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE document [
<!ENTITY webEntity SYSTEM 'C:\Temp\web.xml'>
]>
&webEntity;

所以 web.xml 的实际内容将是文件 C:\Temp\web.xml 的内容。

简而言之,没有官方的方法可以做到这一点,但有技巧。我想,人们所做的是为每个生产站点制作一个定制包。有多种方法可以使用 Maven 自动执行此操作,例如战争覆盖或分类器。这里是an interesting link。

关于你的第二个问题,我不会依赖这个假设。在 Tomcat 服务器上修改爆炸的资源非常简单,但在 JBoss AS 上就没有那么简单了。

【讨论】:

@BalusC 在此处指出:***.com/questions/25928486/… ENTITY 方法是一个 XXE 漏洞,并计划进行修补。我绝对不会走那条路。 bugzilla.redhat.com/show_bug.cgi?id=1069911

以上是关于部署后更改 web.xml的主要内容,如果未能解决你的问题,请参考以下文章

解密Struts2核心文件

部署后更改 web.xml

部署后更改不会应用到刀片页面

prisma 部署后,prisma 没有应用更改

Grails - 更改 javascript 后重新部署

我更改存储库 URL 后 Capistrano 部署失败