gpt4 book ai didi

spring - 不要在某些网址上使用 session

转载 作者:行者123 更新时间:2023-11-28 22:40:43 24 4
gpt4 key购买 nike

我正在尝试制作一个可以加载的特定 api url,但不会更新用户 session 的“上次事件”时间。

我已经设置好,如果 60 分钟不活动,我的用户就会注销,通过 HttpSession.setMaxInactiveInterval()server.session.timeout 和 spring安全,效果很好。现在,我正在尝试构建一个 api 调用,客户端可以调用它来检查他们的 session 在到期之前还有多长时间。但是,问题的症结在于,如果我调用 api,它会将此视为用户事件并将 session 再续订 60 分钟,从而达不到目的。

我希望也许有一种方法可以禁止对某个 url 使用 session 。然后我可以通过发送的 cookie 手动获取 session ID,手动查找他们的 session 对象以从中获取我需要的信息,而无需更新最后一个事件。

最佳答案

您最好编写自己的 session 失效逻辑。
如果不进行大量修改工作,您无法手动控制 tomcat 访问时间行为。
您可以编写一个 servlet 过滤器来跟踪最后一次访问页面(白名单页面除外)并使超过阈值的 session 无效。

public class AccessTimeFilter implements Filter {

private static final long ACCESS_TIME_WINDOW = 30 * 60 * 1000;//30 Mins
private static final Set<String> IGNORED_URLS = new HashSet<>(Arrays.asList("/myurl", "/someOtherUrl"));

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession();
Long realLastAccessedTime = (Long) session.getAttribute("realLastAccessedTime");
if(realLastAccessedTime != null &&
realLastAccessedTime < (System.currentTimeMillis() - ACCESS_TIME_WINDOW)){
session.invalidate();
}

doFilter(req, res, chain);

String url = request.getServletPath();
if(!IGNORED_URLS.contains(url)){
session.setAttribute("realLastAccessedTime", System.currentTimeMillis());
}
}

关于spring - 不要在某些网址上使用 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39759061/

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