Отключить доступ по расширению файла в Tomcat web.xml

StackOverflow https://stackoverflow.com/questions/1160918

  •  18-09-2019
  •  | 
  •  

Вопрос

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

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

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

Спасибо

Это было полезно?

Решение

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

Другие советы

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

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

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

Используя Фильтр

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

Используя Клапан (Специально для Tomcat)

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

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

Так:

<servlet-mapping>
   <servlet-name>Empty Servlet</servlet-name>
   <url-pattern>*.xml</url-pattern>
</servlet-mapping>

Это не работает с 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top