gpt4 book ai didi

java - 如何在不重置 tomcat session 超时的情况下执行经过身份验证的 AJAX 请求?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:52 25 4
gpt4 key购买 nike

我有一个现有的 Grails Web 应用程序正在生产中并且有 30 分钟的 session 超时。我们正在运行 Tomcat (tcServer)。

当用户通过身份验证并在某些页面上时,我想向服务器发出一些定期轮询 ajax 请求,这些请求不会延长这 30 分钟的 session 超时 - 这样我们的 session 超时就不会受到阻碍。

问题类似于this unanswered asp.net question ,但在 Java/Tomcat 领域中,没有任何答案可以解决这个问题。

如何在不重置 tomcat session 超时的情况下执行经过身份验证的 AJAX 请求?

是否有某种过滤器或 url 匹配机制可用于排除请求以延长 session 超时?

最佳答案

我会选择一个 Grails 过滤器,它可以做一些类似于 The-MeLLeR 所提议的事情,而无需在所有 session 中进行不必要的循环:

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
}
}
}
}

session 超时应该依赖注入(inject)或以其他方式与 web.xml 中的值保持同步。

还有两个问题。一种情况是存在 Ajax 请求但之前没有非 Ajax 请求 (lastAccess == null)。另一个是如何在 30 分钟没有非 Ajax Activity 后出现 Ajax 请求时将浏览器重定向到登录页面或您需要去的任何地方。您必须呈现 JSON 或其他一些响应,客户端会检查这些响应以了解它已超时并执行客户端重定向。

关于java - 如何在不重置 tomcat session 超时的情况下执行经过身份验证的 AJAX 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4834270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com