2009-07-21 5 views

Antwort

0

Soweit ich weiß, gibt es keine einfache Lösung. Am Ende of this post wird erklärt, wie Sie JDBCRealm verwenden können, um einen Sicherheitskontext um einige Dateien Ihrer Wahl zu erstellen. Wenn ein Benutzer versucht, auf eine Datei zuzugreifen, die mit Ihrem Muster übereinstimmt (in Ihrem Fall * .xml), werden sie auf eine Login- oder eine Fehlerseite umgeleitet.

3

Ich wollte selbst eine Antwort und war nicht zufrieden mit der JDBCRealm Antwort.

Die standardmäßigen versteckten Ordner "WEB-INF" und "META-INF" sind in der Statischen Ressourcenlogik fest codiert, daher scheint derselbe Mechanismus unerschwinglich zu sein. Sie müssten einige Kombinationen von DefaultServlet, StandardContext und StandardContextValve ersetzen oder ändern. Es ist ein Chaos.

Aber es gibt zwei einfache Möglichkeiten, die ich versuchte, die Filterung, nach der Sie suchen, zu erreichen.

ein Filter

Sie verwenden können einen generischen Servlet-Filter schreiben 404-Fehler für jede Datei zurück eine Liste übereinstimmen. Du könntest diese Liste als Environment Entries in context.xml, in einem properties file auf dem Classpath, in einer Datenbank gespeichert, oder was auch immer deine Präferenz (auch als fest codierte Strings, wenn Sie eine Art Masochist sind).

ein Valve(Tomcat-spezifisch)

Tomcat Ventile erreichen so ziemlich die gleichen wie Filter, aber auf einem niedrigeren Niveau verwenden. Sie sind nicht Teil der Servlet Spec, so dass Ihre App nicht zu anderen Servlet Containern portierbar ist. In meinen Experimenten passiert das Senden von 404-Antworten nicht denselben Kanal wie 404-Antworten, die normalerweise in Ihrer Anwendung gesendet werden (wenn Sie z. B. benutzerdefinierte 404-Seiten oder Handler einrichten, werden sie nicht verwendet, wenn 404 von einem Valve zurückgegeben wird)

3

Es gibt noch einen einfacheren Weg. Sie leiten einfach alle Anfragen mit der spezifischen Erweiterung an ein leeres Servlet um.

So:

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

Das funktioniert nicht mit Tomcat arbeiten, die nicht ein Servlet-Mapping ohne eine entsprechende Servlet Erklärung akzeptiert. Ich würde empfehlen, eine einfache ErrorServlet writting, die 404 systematisch wie sendet:

<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> 
: in der Datei web.xml

package com.yourpackage; 

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

Dann fügen Sie die entsprechende Konfiguration