Спасибо всем заблаговременно -Отключить доступ через расширение файла в Tomcat web.xml
Как я могу отключить доступ через браузер по типу файлов?
Например, если я хотел отключить весь доступ к XML-файлам, как я могу это сделать?
Благодаря
Спасибо всем заблаговременно -Отключить доступ через расширение файла в Tomcat web.xml
Как я могу отключить доступ через браузер по типу файлов?
Например, если я хотел отключить весь доступ к XML-файлам, как я могу это сделать?
Благодаря
Насколько я знаю, не существует простого решения для этого. В конце of this post объясняется, как вы можете использовать JDBCRealm, чтобы создать контекст безопасности вокруг некоторых файлов ваших выборов. Если пользователь пытается получить доступ к файлу, соответствующему вашему шаблону (в вашем случае * .xml), они будут перенаправлены на страницу входа или ошибки.
Я хотел ответить на это сам и не был удовлетворен ответом JDBCRealm.
По умолчанию скрытые папки «WEB-INF» и «META-INF» жестко закодированы в логике статического ресурса, поэтому использование того же механизма кажется непозволительно трудным. Вам придется заменить или изменить некоторую комбинацию DefaultServlet, StandardContext и StandardContextValve. Это беспорядок.
Но есть два простых способа, с помощью которых я попытался выполнить фильтрацию.
Использование Filter
Вы можете написать общий Servlet фильтр, чтобы вернуть 404 ошибки для любого файла, соответствующего какой-то список. Вы можете настроить этот список как Environment Entries в context.xml, в properties file на пути к классам, хранящемся в базе данных, или независимо от ваших предпочтений (даже как жестко закодированные строки, если вы какой-то мазохист).
Использование Valve(Tomcat-специфических)
Tomcat Вентили выполнить довольно много то же самое, как фильтры, но на более низком уровне. Они не входят в состав Servlet Spec, поэтому ваше приложение не будет переноситься в другие контейнеры сервлетов. Кроме того, в моих экспериментах с этим отправка 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>