Ответ 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-адрес в панели браузера adres. Обычные страницы и клиенты шаблонов, которые предназначены для непосредственного доступа, не должны размещаться в папке /WEB-INF
.
Кстати, составные файлы компонентов, в свою очередь, также не должны быть общедоступными, однако они по спецификации должны быть помещены в папку /resources
, которая по умолчанию является общедоступной. Если вы убедитесь, что у вас есть доступ ко всем ресурсам, используя для этого, предоставленные компоненты, чтобы они никогда не обращались по адресу /resources
в URL (но вместо этого на /javax.faces.resource
), тогда вы можете добавить следующее ограничение в web.xml
, чтобы заблокировать весь открытый доступ к папке /resources
:
<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>