2012-03-23 67 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