Я использую Tomcat 7 с функцией Spring MVC и Spring в асинхронном режиме.Весна Отсроченный результат потерял http-сеанс
Затем я использую DeferredResult для запроса async. Механизм работает отлично, но проблема заключается в том, что когда deferredResult делает setResult() и возвращает обещание, я потерял всю свою сессию, и мой следующий запрос дал мне запрет на 403, поскольку у меня нет моей аутентификации на моем SecurityContextHolder.
Я думаю, это потому, что возвращение обещания выполняется в другом потоке, который не имеет сеанса.
Кто-нибудь может поставить меня в правильном направлении здесь, пожалуйста.
Метод обратного вызова onCompletion Я передаю сеанс, который я помещаю, когда создаю отложенный запрос на карте.
deferredResult.onCompletion(new Runnable() {
@Override
public void run() {
request.getSession().setAttribute(SPRING_SECURITY_CONTEXT, securityContextContainer.get(deferredResult));
securityContextContainer.remove(deferredResult);
}
});
Если вы действительно решили свою проблему, отправьте его как ответ и примите его, не добавляйте его к вопросу. – kryger