我可以在 tomcat 中放置一个手动提取的 war 而不是 deployOnStartup=true 吗?在 tomcat 中已经提取了 war 个文件是否合适

Can i place a manually extracted war in tomcat instead of deployOnStartup=true. Is it proper to have already extracted war files in tomcat

我在 tomcat server.xml 中添加了 deployOnStartup="true"。但由于安全问题,建议设置 deployOnStartup="false",因为保持它为 true 会允许部署恶意或未经测试的应用程序,因此应该禁用它。 将提取的 war 文件直接保存在 Web 应用程序中,而不必每次都提取,这有什么问题。

我认为您误解了 deployOnStartup 的作用。有 4 种方法可以将 Web 应用程序添加到 Tomcat:

  1. conf/server.xml 中的 <Host> 元素内配置 <Context> 元素。对 <Context> 元素的任何更改都需要重新启动服务器,
  2. <application-name>.xml 文件添加到主机的 configBase 目录 (conf/Catalina/<host-name>),
  3. 添加一个WAR文件到主机的appBase目录(通常是webapps),
  4. 在主机的 appBase 目录中添加一个目录。

3和4没有区别

如果您设置 deployOnStartup="false" autoDeploy="false",使用 2、3 和 4 定义的 Web 应用程序将 不会 部署。每次服务器重启后,您都需要通过 JMX 或 Tomcat Manager 手动部署它们。如果您保留 autoDeploy="true"(默认值),第 2、3 和 4 点的 Web 应用程序将不会在启动时部署,而是在几秒钟后,当 Tomcat 扫描应用程序中的更改时。

从安全角度来看 deployOnStartup="false" 是一个极端的解决方案,因为它迫使您在 server.xml 中定义所有内容。您可以通过以下方式获得类似的效果:

  • 使整个 conf 目录仅可由管理员写入且可由系统用户读取 运行 Tomcat,
  • 使 webapps 目录仅可由管理员和 Tomcat 用户写入。如果您使其只能由管理员写入,则需要设置 unpackWARs="false" 并且您将无法使用 Tomcat Manager 部署新的 WAR。