阻止用户通过地址栏转到页面

时间:2016-01-21 01:50:58

标签: jsf jsf-2

我有一个网络应用程序。用户登录后,我希望用户通过单击按钮或链接来导航页面,而不是手动更改浏览器地址栏上的URL。我看到一些帖子我们可以使用安全约束来这样做。我在web.xml中有这个。但似乎它不起作用。

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

<security-constraint>
    <display-name>Restrict raw XHTML Documents</display-name>
    <web-resource-collection>
        <web-resource-name>XHTML</web-resource-name>
        <url-pattern>/faces/*</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>

1 个答案:

答案 0 :(得分:0)

我真的不喜欢这种方法。用户在使用Web应用程序时会遇到一些事情,为了获得最佳用户体验,您不应尝试改变方式,用户使用浏览器。

但是,如果你真的想要这个,可以做到以下其中一个:

  • 您可以检测所有链接并拦截来自javascript的点击。单击时,拦截器应创建一个cookie,其中包含链接所引用的路径。当用户请求页面时,您应该检查他们的cookie是否包含所请求的URL,否则将其重定向到主页。

  • 您可以为每个网址生成一个令牌,并将其附加到网址的末尾,以便http://blabla.com/mypage成为http://blabla.com/mypage?token=298347287。 令牌将包含有关URL的信息,并且会超时,之后它将不再有效。然后你会检查令牌的有效性,这将验证用户是否确实点击了链接,而不仅仅是输入了网址(注意:用户通过从链接复制来输入包含令牌的网址仍然可能发生)