【问题标题】:Default servlet mapping for different deployment environments不同部署环境的默认 servlet 映射
【发布时间】:2012-04-08 01:50:10
【问题描述】:

我们想在 Tomcat、WebLogic、WebSphere 和 JBoss 上部署我们的应用程序。我们应用程序的 web.xml 需要包含到默认 servlet 的映射。

对于 Tomcat,这个 servlet 被命名为“default”,所以我们的映射将显示为:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/js/calendar/flexcal.html</url-pattern>
</servlet-mapping>

但在其他平台上它会发生变化(即 WebLogic 是“FileServlet”)。

有没有办法定义一个条件映射,它会根据可用的内容而改变?如果不是,我们应该如何处理这个问题?

谢谢!

【问题讨论】:

    标签: tomcat web-applications servlets weblogic webcontext


    【解决方案1】:

    没有办法。

    您最好不要以任何方式显式映射到容器的默认 servlet。您不仅将您的 webapp 与特定容器紧密耦合,而且直到大约一年前,在 Tomcat 和克隆(JBoss、WebSphere 等)中这样做时还存在一个巨大的安全漏洞。只要默认 servlet 映射到与 / 不同的 URL 模式,攻击者就可以在 /WEB-INF/META-INF 中请求文件(可能包含敏感信息)。另见issue 50026,由您真实报道。

    而是将您的前端控制器 servlet 映射到更具体的 URL 模式而不是 /*,并在 /* 上创建和映射一个全局过滤器,该过滤器根据当前请求 URI 转发到前端控制器或继续到默认 servlet .具体示例参见How to access static resources when mapping a global front controller servlet on /*

    【讨论】:

      猜你喜欢
      • 2011-10-05
      • 2017-02-01
      • 2012-12-22
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2011-11-29
      相关资源
      最近更新 更多