/WEB-INF
文件夾中的文件確實無法由最終用戶公開訪問。所以你不能有像http://localhost:8080/contextname/WEB-INF/some.xhtml
這樣的東西。這將是一個潛在的安全漏洞,因爲最終用戶可以查看/WEB-INF/web.xml
等等。
但是,您可以使用/WEB-INF
文件夾,把主模板文件,包括文件和標記文件。例如,這是擺外面/WEB-INF
和下面的模板客戶page.xhtml
是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來直接打開它們。正在訪問的直接訪問的普通頁面和模板客戶端不得放置在/WEB-INF
文件夾中。
順便說一下,複合組件文件反過來也不應該公開訪問,但他們是通過規定需要放置在默認公開訪問的/resources
文件夾中。如果你確保你訪問使用therefor provided components所有資源,以便它們被/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>
這是一個突出的問題,涉及到facelets的許多方面。 – Thufir 2015-02-15 09:38:05