57 votes

Quels fichiers XHTML dois-je mettre dans / WEB-INF et lesquels pas?

Après ces questions:

que j'ai écrit tout pour résoudre un "bête" problème pour la JSF2 cadre, le fait que je ne peux pas accéder directement à une page stockée dans un /WEB-INF sous-dossier. Après cela, j'ai fait quelques recherches sur Google et Stackoverflow, je voudrais savoir une chose: Comment structurer un JSF2 projet web?

En particulier, exactement où dois-je mettre les pages XHTML?

121voto

BalusC Points 498232

Fichiers en /WEB-INF le dossier sont en effet pas accessibles au public par l'utilisateur final. Si vous ne pouvez pas avoir quelque chose qui ressemble http://localhost:8080/contextname/WEB-INF/some.xhtml. Ce serait un risque de sécurité que l'utilisateur serait en mesure de visualiser entre autres /WEB-INF/web.xml et ainsi de suite.

Vous pouvez cependant utiliser l' /WEB-INF dossier pour placer le maître modèle fichiers, les fichiers et les fichiers de balises dans. Par exemple, le modèle suivant client page.xhtml qui est placé à l'extérieur de /WEB-INF et est accessible par l' http://localhost:8080/contextname/page.xhtml:

<ui:composition template="/WEB-INF/templates/template.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <ui:define name="content">
        ...
        <ui:include src="/WEB-INF/includes/include.xhtml" />
        ...
    </ui:define>
</ui:composition>

L'avantage de placer des modèles de documents et les fichiers à inclure, en /WEB-INF , c'est que l'utilisateur final ne sera pas en mesure d'ouvrir directement en entrant/deviner son URL dans le navigateur l'adresse de la barre. Les pages normales et le modèle des clients qui sont destinés à être directement accessible ne doit pas être placé en /WEB-INF le dossier.

Par ailleurs, le composite fichiers de composant sont aussi ne doit pas être accessible au public, mais ils sont par la spécification doivent être placés dans /resources le dossier qui est par défaut publiquement accessibles. Si vous vous assurez que vous accédez à toutes les ressources à l'aide de l' effet fourni des composants de sorte qu'ils ne sont jamais accessibles par /resources dans l'URL (mais plutôt en /javax.faces.resource), alors vous pouvez ajouter la contrainte suivante pour web.xml pour bloquer tous les accès du public à l' /resources le dossier:

<security-constraint>
    <display-name>Restrict direct access to the /resources folder.</display-name>
    <web-resource-collection>
        <web-resource-name>The /resources folder.</web-resource-name>
        <url-pattern>/resources/*</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint> 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X