Spring浏览器后退按钮处理

时间:2017-12-19 18:51:13

标签: java spring spring-mvc back-button spring-webflow

使用Spring 4.2.9

网络流:我的网页流有三页第1页,第2页和错误网页

场景:用户点击了电子邮件中的链接,我的后端代码消耗了链接,用户登陆了第1页(地址栏中的链接现在不同于用户点击),用户在第1页上执行所需的操作,然后单击继续按钮并登陆第2页。

当用户在第2页

时,我需要什么
  1. 用户按下浏览器后退按钮,他们应该转到错误页面。
  2. 用户在第1页上复制了该链接并打开了新标签并粘贴了第1页链接,他们应该登陆错误页面。

3 个答案:

答案 0 :(得分:0)

  1. 这是一个很常见的问题。简单的谷歌搜索提供了一些可能的解决方案。你试过吗?如果是,则更新问题,更详细地说明问题。如果没有,这里有几个链接:

  2. 您可以通过配置Spring MVC过滤器(或拦截器)来实现此目的。在那里,您可以检查请求是否为GET,并且它包含您要阻止的URL。如果为true,则可以将该请求重定向到错误或访问被拒绝页面。

答案 1 :(得分:0)

为了防止用户在使用浏览器返回按钮返回时重置值,您可以在conversationScope中放置一个变量,当您使用后退按钮时,此范围中的变量不会恢复到之前的状态。您可以通过这种方式设置变量到达第2部分并在加载第1部分时进行检查,但为了使其工作,第1部分和第2部分需要在同一个流程中。

为了防止用户再次使用链接,如果他们是经过身份验证的用户,您可以在数据库中保存一个标志,说明他们已完成流程,只需在加载第1部分时查看数据库并在用户处抛出异常不应该有访问权限。如果他们是未经身份验证的用户(比如在进行调查时),请为每个用户提供一个令牌(令牌应该足够随机,以至于无法轻易强行推送)并将其存储在您的数据库中,当第1部分加载时检查令牌在数据库中,当您的流程完成后,从数据库中删除令牌。

如果您不能执行此操作,您可以使用Cookie,只需在用户到达第2部分时向其发送Cookie,他们的浏览器会在任何新请求时自动发送,如果您在第1部分你可以抛出异常。但是用户可以删除他们的cookie来绕过保护。

答案 2 :(得分:0)

将第2页更改为结束状态解决了问题。解决方案在" Spring Web Flow的权威指南"中提到。 谢谢大家的帮助。