powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
25 сообщений из 34, страница 1 из 2
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075264
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

сделал по работе небольшое веб-проект по тестированию сотрудников.
используется JSP + Spring web MVC(2.5.6) + ojdbc6. крутится всё на Tomcat 6(и на 7 пробовал).

Краткое описание:
юзеры логинятся. кликают на выбранном тесте и начинают его проходить.

ПРОБЛЕМА: иногда(системы не выявил) при ответе на текущий вопрос(отсылается форма с вариантами ответов) - взору юзера открывается страница с Логином и текущим вопросом ДРУГОГО пользователя(из тех кто щас проходит тестирование).

тоесть отвечает Петя на свои вопросы, вдруг БАХ - система в браузер выводит ему что он Вася. если обновить или ответить на вопрос - то юзер опять станет Петей и продолжит отвечать свои вопросы.

Примерно понимаю в чем проблема(как я думаю). когда в сервлет на обработку поступают несколько почти-паралельно запросов, пока не сформировался ответ для Пети, ИД юзера обновляется на Васин. и далее из БД вытаскивается все как будто для Васи.
скорее всего глюк гдето у меня в коде. например какойто объект виден для всех запросов сразу. а не внутри текущей сессии.
были статические поля - убрал их.

каждый запрос обрабатывается классически в методе:
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)

внутри него я определяю для каждого контроллера что показать, кто текущий юзер(по сессии), вытаскиваю данные из БД, сохраняю их в ModelAndView и потом в JSP вывожу вручную.

понимаю что без кода помочь мне сложно. но может подтолкнете в нужном направлении. где я мог допустить такой глюк. или может неправильно понимаю принцип работы сервлетов или самого Spring. переделываю и так и сяк - проблема остается.

помогите. явно детский глюк.
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075367
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поля где-то используете, где не следовало. Не только статические но и обычные. Контроллер и Transaction Script должны быть stateless.
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075452
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

внутри каждого
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
я создаю НОВЫЙ объект (его я передаю потом во все необходимые методы, параметром, чтобы где нужно были доступны request, response, session)
Env env = new Env(request, response, true);
в его конструкторе получаю сессию
this.session = this.request.getSession(true);

из сесии вытаскиваю сохраненный ИД залогиненного юзера
env.UID = 0;
if (env.getSess().getAttribute("_UID_") != null) {
env.UID = Integer.valueOf(env.getSess().getAttribute("_UID_").toString());
}

и далее на основании этого env.UID уже делаю запросы в БД.
получается что как раз это поле env.UID и шарится между запросами от разных юзеров?

а как мне сделать это поле чтоб при обработке каждого запроса оно было уникальным а не общим для всех. я то считал как раз что раз я создал объект Env, то его поля будут доступны только для запроса. и по окончании него этот объект помрет.
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075456
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторизация на сайте через что? если пользователя храните в спринг-бине, то у него по умолчанию апп-scope. ну и scope прочих бинов проверьте
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075473
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavel_nvавторизация на сайте через что? если пользователя храните в спринг-бине, то у него по умолчанию апп-scope. ну и scope прочих бинов проверьте

авторизацию делаю сам ручками.
рисую сам форму в jsp, обрабатываю её в соответсвующем контроллере LoginController.
если авторизация прошла успешно, то сохраняю в сессию ИД залогиненного юзера. и редирект на главную страницу (IndexController).

а уже в IndexController опять по новое. если в сесии есть ИД юзера, то вытаскиваю его и полез в БД.(как описал выше)

данные юзера тащу из БД и кладу в объект Member. его тоже каждый раз заново создаю. бины самого спринга не использую.
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075480
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u, может LoginController - сингтон?
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075484
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логи нужно детальные писать. Тогда не придется гадать на форуме.
Код: java
1.
2.
3.
4.
env.UID = 0;
if (env.getSess().getAttribute("_UID_") != null) {
  env.UID = Integer.valueOf(env.getSess().getAttribute("_UID_").toString());
}


Для всех юзеров, у которых случайно не оказалось _UID_ в сессии, env.UID равен 0?
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075497
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fercr u, может LoginController - сингтон?
public class LoginController extends AController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
...........


AController это мой базовый контроллер для всех. каждый контролелер реализует интерфейс org.springframework.web.servlet.mvc.Controller.
т.е. явно синглтоном я никого не делал. может это делает сам Спринг. я его плохо знаю еще. потому возможно и наворотил чтото не так.
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075499
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u, вроде все бины в спринге по умолчанию синглтоны
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075501
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczДля всех юзеров, у которых случайно не оказалось _UID_ в сессии, env.UID равен 0?
ну да. раз неавторизован - значит гость. а гость видит только форму логина.
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075513
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fercr u, вроде все бины в спринге по умолчанию синглтоны
как сделать их НЕсинглтонами ? через указание scope Только?
получается что любой объект сохданный мной в методе
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
будет синглтоном?

опупеть. получается можно доверять только встроенным объектам request и response ?
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075544
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, сам контроллер только будет синглтоном, что бы не создаваться каждый раз на каждый запрос.
В методах идет обычный жизненный цикл. Да и синглтонг/не синглтон задается только в контейнере, вы же в методах с контейнером не работаете (на первый взгляд)
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075546
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u, непонятно что у вас создается за объект. может через ThreadLocal надо?
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075558
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferc, например, мне как-то нужно было чтобы для каждого юзера был свой класс со статичными полями, разрулилось через ThreadLocal
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075566
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fercferc, например, мне как-то нужно было чтобы для каждого юзера был свой класс со статичными полями, разрулилось через ThreadLocal
В spring mvc нормально поддерживаеться scope для бинов - request/session/singleton и другие. Самодельные велосипеды, как раз и приводят к тому, что кто-то где-то забыл ThreadLocal почистить и второй клиент получает данные первого
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075568
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fercr u, непонятно что у вас создается за объект. может через ThreadLocal надо?
просто объект. я его использую как контейнер для всякой информации.
в том числе и информации о том какой юзер сделал текущий запрос.

Env env = new Env(request, response);

public class Env {
...
public int UID = 0;
...
}


ладно. щас попробую изменить scope у всех контроллеров на prototype.
чтоб создавались заново всегда. если проблема исчезнет, значит по крайней мере я на правильном пути. и буду копать дальше.

спасибо всем.
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075572
ferc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, это было в vaadin
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075579
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fercBlazkowicz, это было в vaadin
Это очень важно в контексте вопроса про Spring MVC.
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075587
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uладно. щас попробую изменить scope у всех контроллеров на prototype.
чтоб создавались заново всегда. если проблема исчезнет, значит по крайней мере я на правильном пути. и буду копать дальше.

Вам в целом нужно архитектуру пересмотреть.
Задача контроллера обработать Request, получить из него данные и забыть. А вы же тягаете Request внутри своего ENV зачем-то.
Spring имеет кучу средств по
- получению Bean-объекта из Request через маппинг или ещё как.
- управлению scope, если объект связан с Session или Request.
Вам не нужно самому работать с Servlet API.
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075632
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВам не нужно самому работать с Servlet API.
изначально от незнания делал свои велосипеды.
согласен что в Спринг все плюшки уже придуманы. осталось только обучиться их правильному использованию. этим и займусь в свободное время. спасибо
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075660
mesier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uладно. щас попробую изменить scope у всех контроллеров на prototype.
чтоб создавались заново всегда. если проблема исчезнет, значит по крайней мере я на правильном пути. и буду копать дальше

Загляни в конфиги - какие пользовательские бины ты прописал в контексте приложения, контексте сервлета. Если внимательно последить за логами Спринга во время деплоя приложения (в режиме отладки), можно заметить, что Спринг их синглтонами обзывает..
Скорее всего какому-то из них активно переписываешь свойства, потом отдаешь в реквест. Получилось вот такое однопользовательское веб-приложение. ))
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075663
mesier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u осталось только обучиться их правильному использованию. этим и займусь в свободное время. спасибо
Без знания архитектуры Спринга, научиться правильно использовать "плюшки" вряд ли получится. Только и останется, что методом копипаста приложения писать..
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075670
mesier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mesier переписываешь свойства, потом отдаешь в реквест. )
ну в респонс же!
устал что-то к концу дня..
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075809
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

Во первых как тестируешь? Если из под одного браузера одновременно пытаешься тестировать работу нескольких пользователей, то возможно это вообще проблемы браузера.

Второй кусок кода под сомнением это Env env = new Env(request, response); По спецификации объекты Respose и Request валидны только на протяжении обработки запроса. Web контейнер впринципе может использовать пул request\respose.
...
Рейтинг: 0 / 0
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
    #38075879
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0Во первых как тестируешь? Если из под одного браузера одновременно пытаешься тестировать работу нескольких пользователей, то возможно это вообще проблемы браузера.

Второй кусок кода под сомнением это Env env = new Env(request, response); По спецификации объекты Respose и Request валидны только на протяжении обработки запроса. Web контейнер впринципе может использовать пул request\respose.
Кеширование экземпляров с учетом современных GC это ущербная стратегия. Вряд ли сервер так делает.
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]