66

これらの質問の後:

サブフォルダーに保存されているページに直接リンクできないという JSF2 フレームワークの「ばかげた」問題を解決するためにすべてを書きました/WEB-INF。その後、Google と Stackoverflow について調査を行いました。JSF2 Web プロジェクトを構築するにはどうすればよいでしょうか。

特に、XHTML ページを正確にどこに置くのでしょうか?

4

1 に答える 1

132

フォルダー内のファイルは、/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 を入力/推測して直接開くことができないことです。直接アクセスすることを意図した通常のページとテンプレート クライアントは、/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> 
于 2012-01-27T12:58:48.360 に答える