2009-07-21 6 views

Répondre

0

Pour autant que je sais qu'il n'y a pas de solution simple pour cela. À la fin of this post, il est expliqué comment vous pouvez utiliser JDBCRealm pour créer un contexte de sécurité autour de certains fichiers de votre élection. Si un utilisateur tente d'accéder à un fichier correspondant à votre modèle (dans notre cas * .xml), il sera redirigé vers une page de connexion ou une page d'erreur.

3

Je voulais une réponse à cela moi-même, et je n'étais pas satisfait de la réponse de JDBCRealm.

Les dossiers cachés par défaut "WEB-INF" et "META-INF" sont codés en dur dans la logique des ressources statiques, donc l'utilisation du même mécanisme semble extrêmement difficile. Vous devez remplacer ou modifier une combinaison de DefaultServlet, StandardContext et StandardContextValve. C'est le bordel.

Mais il y a deux façons simples que j'ai essayées pour accomplir le filtrage que vous recherchez.

L'utilisation d'un Filter

Vous pouvez écrire un filtre Servlet générique pour retourner des erreurs 404 pour tout fichier correspondant à une liste. Vous pouvez configurer cette liste comme Environment Entries dans context.xml, dans properties file sur le chemin de classe, stockée dans une base de données, ou quelle que soit votre préférence (même en tant que chaînes codées en dur, si vous êtes une sorte de masochiste).

L'utilisation d'un Valve(Tomcat spécifique)

Tomcat Vannes accomplir à peu près la même chose que les filtres, mais à un niveau inférieur. Ils ne font pas partie du Servlet Spec, de sorte que votre application ne sera pas portable vers d'autres conteneurs de servlet. En outre, dans mes expériences avec cela, envoyer 404 réponses ne passent pas par le même canal que 404 réponses envoyées normalement dans votre application (par exemple, si vous installez 404 pages ou gestionnaires personnalisés, ils ne sont pas utilisés quand un 404 revient d'une valve

3

Il existe un moyen encore plus simple. Vous venez de rediriger toutes les demandes avec l'extension spécifique à une servlet vide.

Comme ceci:

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

Cela ne fonctionne pas avec Tomcat qui n'accepte pas servlet-mapping sans déclaration de servlet correspondante. Je recommande simple ErrorServlet ecriture qui envoie 404 systématiquement comme:

package com.yourpackage; 

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

ajouter ensuite la configuration correspondante dans le fichier 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> 
Questions connexes