如何通过JSF导航规则重定向或键入URL来检测用户是否已到达页面?

use*_*373 5 jsf-2

在JSF中是否有任何方法可以用来确定用户是否通过JSF的导航规则到达页面,或者用户是否已直接键入URL以访问该页面?

实际上我想阻止用户直接在浏览器中键入URL来直接转到页面,而我想限制用户使用应用程序导航栏转到页面.

Bal*_*usC 5

一种方法:检查referer标题的存在(是的,拼写错误).

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

要么

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

但是,如果用户已经巧妙地使用了您网页中的链接,但是使用了一些过于热心的代理/防火墙/安全软件,而这些软件referer完全隐藏了标题,那么这将失败.

您可能想要考虑通过将页面放在文件夹中并将其用作由POST请求执行的条件包含(如果需要使用ajax),使页面永远不会直接对用户可用/WEB-INF.例如

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

<h:panelGroup rendered="#{bean.showPage}">
    <ui:include src="/WEB-INF/includes/foo.xhtml" />
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)