会话超时后自动重定向到登录页面 - JSP,Spring

时间:2013-10-12 12:50:07

标签: spring jsp spring-mvc spring-security

我可以在会话注销时将用户重定向到主页..这非常简单。但是,如果用户已登录应用程序并打开页面,即使在会话超时时,他也能够执行所有功能(这很糟糕)。

在页面刷新或提交给服务器之前不会发生重定向...即使用户当前没有登录,也有一些可以由用户完成的更新功能......我做了很多研究但无法解决这个问题。我也找到了这个帖子,但似乎没有正确答案:

Spring Security 3.1 - Automatically redirect to login page when session-timeout occurs

例如,大多数银行网站都会在超时后将您注销...他们不会等到您回来然后在重定向到主页之前提交请求。

2 个答案:

答案 0 :(得分:0)

HTTP是无状态的。为了实现某种形式的状态,服务器可以通过在第一次请求时为其提供会话ID来为每个用户维护会话。用户必须在每个将来的请求上重新发送该会话ID,以识别其他请求在同一会话中发生。

由于会话由服务器维护,因此无法通知客户端会话已超时。

相反,如果用户在会话超时时发出新请求,则他们的会话ID不再好,因此您可以采取特定操作,例如将其重定向到登录页面。

答案 1 :(得分:0)

假设什么都没有用。您可能需要考虑下面提到的方法:

方法1: 在浏览器上创建一个cookie并在其中包含encrypted timestamp,其中包含来自浏览器的上次访问/请求时间戳,对于每个请求,首先获取此cookie值并与预定义的会话输出时间进行比较,如果会话时间到达然后将用户重定向到错误页面,否则提供请求。注销时删除cookie。

为何为时间戳加密值:如果用户以某种方式了解用于会话超时的cookie,则可以在浏览器中更改此值并继续发送此请求。

方法2: 您还可以通过在数据库中为每个登录用户创建一个条目并在每个请求中更新此数据库中的时间戳来实现此目的。对于每个传入请求,从数据库获取此时间戳,并将其与预定义的超时值进行比较,并相应地处理。注销时删除条目。

In both the approaches explicitly perform response.redirect("errorPageUrl");
相关问题