2012-01-27 88 views
51

這些問題後:我需要將哪些XHTML文件放在/ WEB-INF中,哪些不是?

,我寫的所有解決一個 「愚蠢」 的問題的JSF2框架,我無法直接鏈接到存儲在/WEB-INF子文件夾中的頁面。之後,我對Google和Stackoverflow做了一些研究,我會知道一件事情:我如何構建一個JSF2 Web項目?

特別是,我究竟在哪裏放置了XHTML頁面?

+2

這是一個突出的問題,涉及到facelets的許多方面。 – Thufir 2015-02-15 09:38:05

回答

111

/WEB-INF文件夾中的文件確實無法由最終用戶公開訪問。所以你不能有像http://localhost:8080/contextname/WEB-INF/some.xhtml這樣的東西。這將是一個潛在的安全漏洞,因爲最終用戶可以查看/WEB-INF/web.xml等等。

但是,您可以使用/WEB-INF文件夾,把主模板文件,包括文件和標記文件。例如,這是擺外面/WEB-INF和下面的模板客戶page.xhtmlhttp://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> 
相關問題