gpt4 book ai didi

java - Spring 延迟结果丢失了 http session

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

我在异步模式下使用带有 Spring MVC 和 Spring 安全性的 Tomcat 7。

然后我使用 DeferredResult 发出异步请求。该机制工作正常,但问题是当 deferredResult 执行 setResult() 并返回 promise 时,我丢失了所有 session ,并且我的下一个请求给我一个 403 禁止,因为我没有在我的 SecurityContextHolder 上进行身份验证。

我猜是因为 promise 的返回是在另一个没有 session 的线程中完成的。

有人可以在这里把我引向正确的方向。

解决方案:onCompletion 回调方法我传递我在 map 中创建 deferredResult 时放置的 session 。

      deferredResult.onCompletion(new Runnable() {
@Override
public void run() {
request.getSession().setAttribute(SPRING_SECURITY_CONTEXT, securityContextContainer.get(deferredResult));
securityContextContainer.remove(deferredResult);
}
});

最佳答案

解决方案:onCompletion 回调方法我传递我在 map 中创建 deferredResult 时放置的 session 。

  deferredResult.onCompletion(new Runnable() {
@Override
public void run() {
request.getSession().setAttribute(SPRING_SECURITY_CONTEXT, securityContextContainer.get(deferredResult));
securityContextContainer.remove(deferredResult);
}
});

关于java - Spring 延迟结果丢失了 http session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29716119/

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