gpt4 book ai didi

servlets - HTTP session : how to configure URLs that not change the session expiration?

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:34 26 4
gpt4 key购买 nike

我在我的应用程序中轮询每 5 分钟执行一次的 HTTP 请求。

我想将这些 URL 配置为不更改 session 过期时间。否则我的 session 将永远不会过期(我不想要它)。在 web.xml 和 HttpSession 文档中找不到它。

如何才能做到这一点?

已添加

非常重要的澄清:请求应该经过身份验证。这意味着请求应该附加到已经经过身份验证的 JsessionID。

澄清(添加2)

我不希望 session 过期,无论用户是否保持事件状态。我希望 session 将在用户不活动时过期,并且如果用户在 UI 上工作则不会过期。我希望 session 将在用户不活动时过期,尽管每 5 分钟发出一次轮询请求

最佳答案

标准 Servlet API 不支持此功能。

最好的办法是创建一个全局 servlet 过滤器(使用 @WebFilter("/*")),这会减少 HttpSession#setMaxInactiveInterval()每次当特定 URL 到达服务器时,并将其恢复为其他 URL 的默认值。它只需要一些基本的数学知识。

实现的相关部分如下所示:

private static final int DEFAULT_EXPIRE_TIME_IN_SECONDS = 1800;
private static final String SKIP_EXPIRE_TIME_ON_URI = "/somePollServlet";

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession();

if (request.getRequestURI().equals(request.getContextPath() + SKIP_EXPIRE_TIME_ON_URI)) {
long lastAccessedTime = session.getLastAccessedTime();
long currentTime = System.currentTimeMillis();
int newExpireTime = DEFAULT_EXPIRE_TIME_IN_SECONDS - (int) ((currentTime - lastAccessedTime) / 1000);
session.setMaxInactiveInterval(newExpireTime);
}
else {
session.setMaxInactiveInterval(DEFAULT_EXPIRE_TIME);
}

chain.doFilter(req, res);
}

关于servlets - HTTP session : how to configure URLs that not change the session expiration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52973716/

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