2012-03-23 69 views
1

我们希望在Tomcat,WebLogic,WebSphere和JBoss上部署我们的应用程序。我们的应用程序的web.xml需要包含一个到默认servlet的映射。针对不同部署环境的默认servlet映射

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

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

但它改变了其他平台(即是WebLogic “FileServlet”)。

有没有一种方法来定义一个条件映射,将根据可用的情况而改变?如果不是,我们应该如何处理这个问题?

谢谢!

回答

5

没有办法。

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

相反映射前端控制器的servlet上的更具体的URL模式代替/*和创建和/*转发到前控制器或继续根据当前请求URI默认的servlet映射的全局过滤器。请参阅How to access static resources when mapping a global front controller servlet on /*的具体示例。

+0

非常感谢,完美的建议。 – James 2012-03-23 14:54:36

+0

不客气。 – BalusC 2012-03-23 14:55:49