5

ユーザーがJSFのナビゲーションルールによってページに到達したかどうか、またはユーザーがそのページに到達するためにURLを直接入力したかどうかを確認するために使用できるJSFの方法はありますか?

実際には、ブラウザに直接URLを入力して、ユーザーがページに直接アクセスできないようにしたいのですが、ユーザーがアプリケーションのナビゲーションバーを使用してページに移動するのを制限したいと思います。

4

1 に答える 1

5

方法があります:ヘッダーの存在を確認しrefererます(はい、スペルミスがあります)。

if (externalContext.getRequestHeader("referer") == null) {
    // User has most likely accessed the page by directly typing the URL.
}

また

<h:panelGroup rendered="#{empty header['referer']}">
    <!-- User has most likely accessed the page by directly typing the URL. -->
</h:panelGroup>

ただし、これは、Webページのリンクをきちんと使用しているが、refererヘッダーを完全に非表示にする熱心なプロキシ/ファイアウォール/セキュリティソフトウェアを使用しているユーザーには失敗します。

ページをフォルダに配置し、POSTリクエストによって実行される条件付きインクルードとして使用することで、ページをユーザーが直接利用できないようにすることを検討することをお勧めし/WEB-INFます(必要に応じてajaxを使用)。例えば

<h:form>
    <h:commandLink action="#{bean.showPage}" />
</h:form>

<h:panelGroup rendered="#{bean.showPage}">
    <ui:include src="/WEB-INF/includes/foo.xhtml" />
</h:panelGroup>
于 2012-06-12T11:42:14.480 に答える