Я использую рамки весной и вот кусок кода я использую для retirieve в HttpSession
объект:Получение http-сессии из дочернего потока?
ServletRequestAttributes attr;
try {
attr = (ServletRequestAttributes) RequestContextHolder
.currentRequestAttributes();
} catch (Exception e) { }
HttpSession session = attr.getRequest().getSession(false);
Дело в том, RequestContextHolder
класс держатель выставить веб-запрос в форма связанная с нитью RequestAttributes объект.
поэтому он не будет виден за пределами потока, созданного контейнером для обработки запроса. Есть ли способ получить сеанс в дочернем потоке?
Нет, так как это было бы серьезным нарушением безопасности ... –
@ M.Deinum Итак, любая сессия - объект, связанный с потоком. Но это указано где-то в документации API сервлета или где-то еще? Я просто никогда не думал о доступе к сеансу из нескольких потоков ... –
И вы этого не хотите. Представьте, что у вас есть корзина покупок на вашем сеансе, и кому-то разрешили изменить сеанс и добавить вещи в свою корзину ... Я думаю, вы не были бы счастливы, если бы это произошло ... Представьте, что ваши учетные данные безопасности хранятся в сеансе (весенняя безопасность делает), и любой может получить к нему доступ (плохо спроектированная инфраструктура может помещать ваш пароль там) ... –