Grails spring security - 在会话超时时自动重定向

时间:2015-02-09 22:26:35

标签: grails spring-security

使用grails和spring安全性,我想在会话超时后自动显示登录页面。

现在,当会话超时时,它仍然保留在我离开它的页面上。点击任何链接后,我会回到登录页面。我希望用户能够自动重定向到登录页面。

实现这一目标的最佳方式是什么。

1 个答案:

答案 0 :(得分:1)

这取决于您的应用程序以及用户与页面的交互方式。

例如,如果您的页面是静态页面并且没有执行任何AJAX或Websockets,那么完全可能只需设置setTimeout()documentation)函数来重定向X后的数字分钟(其中X是你的会话超时)。计时器将在页面加载时启动。您甚至可以在布局中包含它。

// assumes you are using the default login controller and action
window.setTimeout(function() {
  // this should poll the server and check to see if the session is valid
  // if not then it should issue the redirect (below)
  window.location.href='${createLink(controller: "login", action: "login")}'
}, (20*60*1000)); // 20 minutes

但是,如果您的应用程序使用AJAX或Websockets变得更加复杂,因为用户可以停留在单个页面上并与之交互,并且每次交互时,会话(服务器端)上的超时都将被重置。这将要求您在每次执行操作时管理在客户端(它们所在的页面)上重置计时器。在$.ajaxStart中执行此操作可能有效(documentation)。

var sessionTimeout = ... // leaving this implementation out as it's described above.
$(document).ajaxStart(function() {
  // in your click function, call clearTimeout
  window.clearTimeout(sessionTimeout);

  // then call setTimeout again to reset the timer
  sessionTimeout = window.setTimeout(...);
});

Websockets是一个完全不同的野兽,但只要数据到达时,就会应用与上述相同的概念。

在不了解有关您的应用程序的更多细节的情况下,很难说哪个是正确的选择,但这些选择基本上是您的选择,这些示例应该让您走上正确的道路。