Отображение сервлетов по умолчанию для разных сред развертывания - PullRequest
1 голос
/ 23 марта 2012

Мы хотим развернуть наше приложение на Tomcat, WebLogic, WebSphere и JBoss.Наше приложение web.xml должно содержать отображение на сервлет по умолчанию.

Для Tomcat этот сервлет называется «default», поэтому наше отображение будет выглядеть так:

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

Но на другомплатформ, которые он меняет (т. е. WebLogic - это «FileServlet»).

Существует ли способ определения условного отображения, которое будет меняться в зависимости от того, что доступно?Если нет, то как мы должны подойти к этому вопросу?

Спасибо!

1 Ответ

5 голосов
/ 23 марта 2012

Нет пути.

Желательно, чтобы вы никоим образом не отображали явно сервлет контейнера по умолчанию. Вы не только тесно связываете свое веб-приложение с конкретным контейнером, но еще около года назад в Tomcat и клонах (JBoss, WebSphere и т. Д.) Также была огромная дыра в безопасности. Он позволяет злоумышленникам запрашивать файлы (содержащие, возможно, конфиденциальную информацию) в /WEB-INF и /META-INF всякий раз, когда сервлет по умолчанию сопоставлен с шаблоном URL, отличным от /. См. Также выпуск 50026 , о котором действительно сообщили ваши.

Вместо этого сопоставьте сервлет фронт-контроллера с более конкретным шаблоном URL вместо /* и создайте и сопоставьте глобальный фильтр на /*, который перенаправляет либо на фронт-контроллер, либо продолжает сервлет по умолчанию, в зависимости от текущего URI запроса , Для конкретного примера см. Также Как получить доступ к статическим ресурсам при отображении сервлета глобального фронт-контроллера в /*.

...