Какие файлы XHTML мне нужно вставить в /WEB-INF, а какие нет?


после этих вопросов:

что я написал все, чтобы решить "глупую" проблему для фреймворка JSF2, тот факт, что я не могу напрямую ссылаться на страницу, хранящуюся в /WEB-INF папку. После этого я провел некоторое исследование в Google и Stackoverflow, я бы знал: как структурировать веб-проект JSF2?

в частности, где именно я помещаю страницы XHTML?

1 53

1 ответ:

файлы /WEB-INF папка действительно не является общедоступной для конечного пользователя. Так что вы не можете иметь что-то вроде http://localhost:8080/contextname/WEB-INF/some.xhtml. Это будет потенциальная дыра в безопасности, поскольку конечный пользователь сможет просматривать среди других /WEB-INF/web.xml и так далее.

однако вы можете использовать /WEB-INF папка для размещения файлов мастер-шаблонов, включая файлы и файлы тегов. Например, следующий клиент шаблона page.xhtml, который находится за пределами /WEB-INF и это работает 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>

преимущество размещения мастер-шаблонов и файлов /WEB-INF заключается в том, что конечный пользователь не сможет открыть их напрямую, введя/угадав его URL-адрес в адресной строке браузера. Обычные страницы и клиенты шаблонов, которые предназначены для прямого доступа, не должны размещаться в .

кстати, составные файлы компонентов, в свою очередь, также не должны быть общедоступными, однако они по спецификации требуется разместить в /resources папка, которая по умолчанию общедоступна. Если вы убедитесь, что вы получаете доступ ко всем ресурсам с помощью для этого предусмотрены компоненты так что они никогда не обращались к /resources в URL (но вместо /javax.faces.resource), то вы можете добавить следующие ограничения web.xml заблокировать весь публичный доступ к :

<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>