2015-09-30 4 views
0

Я использую рамки весной и вот кусок кода я использую для retirieve в HttpSession объект:Получение http-сессии из дочернего потока?

ServletRequestAttributes attr; 
try { 
    attr = (ServletRequestAttributes) RequestContextHolder 
      .currentRequestAttributes(); 
} catch (Exception e) { } 
HttpSession session = attr.getRequest().getSession(false); 

Дело в том, RequestContextHolder

класс держатель выставить веб-запрос в форма связанная с нитью RequestAttributes объект.

поэтому он не будет виден за пределами потока, созданного контейнером для обработки запроса. Есть ли способ получить сеанс в дочернем потоке?

+2

Нет, так как это было бы серьезным нарушением безопасности ... –

+0

@ M.Deinum Итак, любая сессия - объект, связанный с потоком. Но это указано где-то в документации API сервлета или где-то еще? Я просто никогда не думал о доступе к сеансу из нескольких потоков ... –

+0

И вы этого не хотите. Представьте, что у вас есть корзина покупок на вашем сеансе, и кому-то разрешили изменить сеанс и добавить вещи в свою корзину ... Я думаю, вы не были бы счастливы, если бы это произошло ... Представьте, что ваши учетные данные безопасности хранятся в сеансе (весенняя безопасность делает), и любой может получить к нему доступ (плохо спроектированная инфраструктура может помещать ваш пароль там) ... –

ответ

1

Нет, нет. В API Servlet сеанс является свойством объекта запроса. Поэтому, если у вас нет запроса, какой из многих существующих сеансов вы получите?

+0

Объект запроса ограничен потоком? –

+0

Да, потому что каждый запрос обслуживается одним потоком. – Andres

+0

Спасибо большое! Кстати, не могли бы вы привести соответствующий раздел из спецификации, если знаете, где это ...? –

Смежные вопросы