ユーザーがJSFのナビゲーションルールによってページに到達したかどうか、またはユーザーがそのページに到達するためにURLを直接入力したかどうかを確認するために使用できるJSFの方法はありますか?
実際には、ブラウザに直接URLを入力して、ユーザーがページに直接アクセスできないようにしたいのですが、ユーザーがアプリケーションのナビゲーションバーを使用してページに移動するのを制限したいと思います。
ユーザーがJSFのナビゲーションルールによってページに到達したかどうか、またはユーザーがそのページに到達するためにURLを直接入力したかどうかを確認するために使用できるJSFの方法はありますか?
実際には、ブラウザに直接URLを入力して、ユーザーがページに直接アクセスできないようにしたいのですが、ユーザーがアプリケーションのナビゲーションバーを使用してページに移動するのを制限したいと思います。
方法があります:ヘッダーの存在を確認し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>