Col*_*ton 8 java ajax grails tomcat session-timeout
我有一个现有的Grails Web应用程序正在生产中并且有30分钟的会话超时.我们正在运行Tomcat(tcServer).
当用户通过身份验证并在某些页面上时,我想要定期轮询对服务器的ajax请求,这些请求不会延长这个30分钟的会话超时 - 这样我们的会话超时就不会被阻止.
问题类似于这个未经回答的asp.net问题,但是在Java/Tomcat领域中没有任何答案可以做到这一点.
如何在不重置tomcat的会话超时的情况下执行经过身份验证的AJAX请求?
是否存在某种过滤器或URL匹配机制,我可以使用它来排除延长会话超时的请求?
我会使用 Grails 过滤器,它的功能类似于 The-MeLLeR 所建议的功能,而不会在所有会话中进行不必要的循环:
class AjaxTimeoutFilters {
int sessionTimeout = 30 * 60 * 1000
private static final String TIMEOUT_KEY = 'TIMEOUT_KEY'
def filters = {
all(controller:'*', action:'*') {
before = {
if (request.xhr) {
Long lastAccess = session[TIMEOUT_KEY]
if (lastAccess == null) {
// TODO
return false
}
if (System.currentTimeMillis() - lastAccess > sessionTimeout) {
session.invalidate()
// TODO - render response to trigger client redirect
return false
}
}
else {
session[TIMEOUT_KEY] = System.currentTimeMillis()
}
true
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
会话超时应该是依赖注入的或以其他方式与 web.xml 中的值保持同步。
还有两个问题尚待解决。一种情况是存在 Ajax 请求,但之前没有非 Ajax 请求 (lastAccess == null)。另一个是当 30 分钟没有非 Ajax 活动后出现 Ajax 请求时,如何将浏览器重定向到登录页面或任何您需要去的地方。您必须呈现 JSON 或其他一些响应,客户端将检查这些响应以了解它是否已超时并执行客户端重定向。
| 归档时间: |
|
| 查看次数: |
3526 次 |
| 最近记录: |