不同部署环境的默认servlet映射

时间:2012-03-23 13:45:16

标签: tomcat web-applications servlets weblogic webcontext

我们希望在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”)。

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

谢谢!

1 个答案:

答案 0 :(得分:5)

没有办法。

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

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