Какие файлы XHTML мне нужно вставить в /WEB-INF, а какие нет?
после этих вопросов:
- https://stackoverflow.com/questions/8589315/jsf2-dynamic-template
- динамический интерфейс: включить
- как я могу получить объект на @WindowScoped?
- как я могу проверить, если объект, хранящийся с @WindowScoped хранится правильно?
- ледяные грани и ошибка в создании Боба в WindowScoped
что я написал все, чтобы решить "глупую" проблему для фреймворка JSF2, тот факт, что я не могу напрямую ссылаться на страницу, хранящуюся в /WEB-INF
папку. После этого я провел некоторое исследование в Google и Stackoverflow, я бы знал: как структурировать веб-проект JSF2?
в частности, где именно я помещаю страницы XHTML?
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>