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