我们希望在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”)。
有没有办法定义一个条件映射,它会根据可用的内容而改变?如果不是,我们应该如何处理这个问题?
谢谢!
答案 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 /*。