JSF中是否有任何方法可以用来确定用户是否通过JSF的导航规则到达页面,或者用户是否直接键入了URL以访问该页面?
实际上我想阻止用户通过直接在浏览器中输入URL直接转到页面,而我想限制用户使用应用程序导航栏转到页面。
答案 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>