Отключить доступ по расширению файла в Tomcat web.xml - PullRequest
4 голосов
/ 21 июля 2009

Спасибо всем заранее -

Как мне отключить доступ через браузер по типу файла?

Например, если бы я хотел отключить весь доступ к XML-файлам, как бы я это сделал?

Спасибо

Ответы [ 4 ]

3 голосов
/ 12 сентября 2009

Я хотел получить ответ на этот вопрос сам, и не был удовлетворен ответом JDBCRealm.

По умолчанию скрытые папки «WEB-INF» и «META-INF» жестко запрограммированы в логике статического ресурса, поэтому использование одного и того же механизма представляется чрезмерно трудным. Вам придется заменить или изменить некоторую комбинацию DefaultServlet , StandardContext и StandardContextValve . Это беспорядок.

Но есть два простых способа, которыми я пытался выполнить фильтрацию, к которой вы стремитесь.

Использование фильтра

Вы можете написать универсальный фильтр сервлетов, который будет возвращать 404 ошибки для любого файла, соответствующего некоторому списку. Вы можете настроить этот список как Записи среды в context.xml, в файле свойств на пути к классам, сохраненном в базе данных, или по вашему усмотрению (даже в виде жестко закодированных строк, если ты какой-то мазохист).

Использование клапана (для Tomcat)

Tomcat Valves выполняет почти то же самое, что и Фильтры, но на более низком уровне. Они не являются частью Спецификации сервлета , поэтому ваше приложение не будет переносимым на другие контейнеры сервлета. Кроме того, в моих экспериментах с этим отправка 404 ответов не проходила по тому же каналу, что и 404 ответа, обычно отправляемых в ваше приложение (например, если вы настраивали пользовательские страницы 404 или обработчики, они не используются, когда 404 возвращается из Valve )

3 голосов
/ 24 ноября 2010

Есть еще более простой способ. Вы просто перенаправляете все запросы с определенным расширением на какой-нибудь пустой сервлет.

Как это:

<servlet-mapping>
   <servlet-name>Empty Servlet</servlet-name>
   <url-pattern>*.xml</url-pattern>
</servlet-mapping>
1 голос
/ 31 июля 2012

Это не работает с Tomcat, который не принимает отображение сервлета без соответствующего объявления сервлета. Я бы порекомендовал написать простой ErrorServlet, который систематически отправляет 404, например:

package com.yourpackage;

public class ErrorServlet extends HttpServlet{
  public ErrorServlet(){
  }
  public void service(HttpServletRequest request, HttpServletResponse response){
    response.sendError(HttpServletResponse.SC_NOT_FOUND);
  }
}

Затем добавьте соответствующую конфигурацию в файл web.xml:

<servlet>
  <description>Servlet that displays a 404</description>
  <display-name>error</display-name>
  <servlet-class>com.yourpackage.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>error</servlet-name>
   <url-pattern>*.xhmtl</url-pattern>
</servlet-mapping>
0 голосов
/ 22 июля 2009

Насколько я знаю, для этого нет простого решения. В конце этого поста объясняется, как вы можете использовать JDBCRealm для создания контекста безопасности вокруг некоторых файлов ваших выборов. Если пользователь пытается получить доступ к файлу, который соответствует вашему шаблону (в вашем случае * .xml), он будет перенаправлен на страницу входа или страницу ошибки.

...