在JSF中是否有任何方法可以用来确定用户是否通过JSF的导航规则到达页面,或者用户是否已直接键入URL以访问该页面?
实际上我想阻止用户直接在浏览器中键入URL来直接转到页面,而我想限制用户使用应用程序导航栏转到页面.
有一种方法:检查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)
归档时间: |
|
查看次数: |
1872 次 |
最近记录: |