web-dev-qa-db-fra.com

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

Après ces questions:

que j'ai tout écrit pour résoudre un problème "stupide" pour le framework JSF2, le fait que je ne peux pas lier directement à une page stockée dans un /WEB-INF sous-dossier. Après cela, j'ai fait des recherches sur Google et Stackoverflow, je saurais une chose: comment structurer un projet Web JSF2?

En particulier, où placer exactement les pages XHTML?

56
Filippo1980

Fichiers dans /WEB-INF le dossier n'est en effet pas accessible au public par l'utilisateur final. Vous ne pouvez donc pas avoir quelque chose comme http://localhost:8080/contextname/WEB-INF/some.xhtml. Ce serait une faille de sécurité potentielle car l'utilisateur final pourrait voir entre autres /WEB-INF/web.xml etc.

Vous pouvez cependant utiliser le /WEB-INF dossier dans lequel placer les fichiers modèles principaux, inclure les fichiers et les fichiers de balises. Par exemple, le client de modèle suivant page.xhtml qui est placé à l'extérieur /WEB-INF et est accessible par 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 principaux et d'inclure des fichiers dans /WEB-INF est que l'utilisateur final ne pourra pas les ouvrir directement en entrant/devinant son URL dans la barre d'adresse du navigateur. Les pages normales et les clients de modèles destinés à être accessibles directement ne doivent pas être placés dans /WEB-INF dossier.

Soit dit en passant, les fichiers de composants composites ne sont pas non plus censés être accessibles au public, mais ils doivent par spécification être placés dans /resources dossier qui est par défaut accessible au public. Si vous vous assurez que vous accédez à toutes les ressources en utilisant les composants fournis à cet effet afin qu'ils ne soient jamais accessibles par /resources dans l'URL (mais à la place par /javax.faces.resource), vous pouvez alors ajouter la contrainte suivante à web.xml pour bloquer tout accès public à /resources 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> 
119
BalusC