0
我在Spring MVC和Spring安全模式下使用Tomcat 7進行異步模式。Spring延遲結果丟失http會話
然後我使用DeferredResult進行異步請求。該機制工作正常,但問題是,比deferredResult使setResult()並返回承諾時,我失去了我所有的會議,並且我的下一個請求給我一個403禁止,因爲我沒有我的身份驗證我的SecurityContextHolder。
我想是因爲承諾的回報是在另一個沒有會話的線程中完成的。
有人可以讓我在這裏正確的方向請。
解決方案:onCompletion回調方法我通過在地圖中創建deferredResult時放置的會話。
deferredResult.onCompletion(new Runnable() {
@Override
public void run() {
request.getSession().setAttribute(SPRING_SECURITY_CONTEXT, securityContextContainer.get(deferredResult));
securityContextContainer.remove(deferredResult);
}
});
如果您確實解決了您自己的問題並將其作爲回答並接受,請不要將其附加到問題中。 – kryger