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

时间:2012-06-12 10:20:40

标签: jsf-2

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

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

1 个答案:

答案 0 :(得分:5)

a 方式:检查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>

但是,如果用户已经巧妙地使用了您网页中的链接,但是使用了一些过分使用的代理/防火墙/安全软件,而这些软件会完全隐藏referer标题。

您可能需要考虑将页面 never 直接提供给用户,方法是将其放在/WEB-INF文件夹中并将其用作由POST请求执行的条件包含(如果必须与ajax)。 E.g。

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

<h:panelGroup rendered="#{bean.showPage}">
    <ui:include src="/WEB-INF/includes/foo.xhtml" />
</h:panelGroup>