2009-07-21 2 views

ответ

0

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

3

Я хотел ответить на это сам и не был удовлетворен ответом 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)

3

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

Как это:

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

Это не работает с 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>