Spring延迟结果丢失http会话
Posted
技术标签:
【中文标题】Spring延迟结果丢失http会话【英文标题】:Spring Deferred result lost http session 【发布时间】:2015-06-25 07:16:55 【问题描述】:我在异步模式下使用带有 Spring MVC 和 Spring 安全性的 Tomcat 7。
然后我使用 DeferredResult 发出异步请求。该机制工作正常,但问题是当 deferredResult 进行 setResult() 并返回承诺时,我失去了所有会话,并且我的下一个请求给了我一个 403 禁止,因为我没有在我的 SecurityContextHolder 上进行身份验证。
我猜是因为 promise 的返回是在另一个没有会话的线程中完成的。
请有人帮我指明正确的方向。
解决方案:onCompletion 回调方法我传递了我在地图中创建 deferredResult 时放置的会话。
deferredResult.onCompletion(new Runnable()
@Override
public void run()
request.getSession().setAttribute(SPRING_SECURITY_CONTEXT, securityContextContainer.get(deferredResult));
securityContextContainer.remove(deferredResult);
);
【问题讨论】:
如果您确实解决了自己的问题,请将其发布为答案并接受,请勿将其附加到问题中。 【参考方案1】:解决方案:onCompletion 回调方法我传递了我在地图中创建 deferredResult 时放置的会话。
deferredResult.onCompletion(new Runnable()
@Override
public void run()
request.getSession().setAttribute(SPRING_SECURITY_CONTEXT, securityContextContainer.get(deferredResult));
securityContextContainer.remove(deferredResult);
);
【讨论】:
以上是关于Spring延迟结果丢失http会话的主要内容,如果未能解决你的问题,请参考以下文章