|
|
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. сделал по работе небольшое веб-проект по тестированию сотрудников. используется JSP + Spring web MVC(2.5.6) + ojdbc6. крутится всё на Tomcat 6(и на 7 пробовал). Краткое описание: юзеры логинятся. кликают на выбранном тесте и начинают его проходить. ПРОБЛЕМА: иногда(системы не выявил) при ответе на текущий вопрос(отсылается форма с вариантами ответов) - взору юзера открывается страница с Логином и текущим вопросом ДРУГОГО пользователя(из тех кто щас проходит тестирование). тоесть отвечает Петя на свои вопросы, вдруг БАХ - система в браузер выводит ему что он Вася. если обновить или ответить на вопрос - то юзер опять станет Петей и продолжит отвечать свои вопросы. Примерно понимаю в чем проблема(как я думаю). когда в сервлет на обработку поступают несколько почти-паралельно запросов, пока не сформировался ответ для Пети, ИД юзера обновляется на Васин. и далее из БД вытаскивается все как будто для Васи. скорее всего глюк гдето у меня в коде. например какойто объект виден для всех запросов сразу. а не внутри текущей сессии. были статические поля - убрал их. каждый запрос обрабатывается классически в методе: public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) внутри него я определяю для каждого контроллера что показать, кто текущий юзер(по сессии), вытаскиваю данные из БД, сохраняю их в ModelAndView и потом в JSP вывожу вручную. понимаю что без кода помочь мне сложно. но может подтолкнете в нужном направлении. где я мог допустить такой глюк. или может неправильно понимаю принцип работы сервлетов или самого Spring. переделываю и так и сяк - проблема остается. помогите. явно детский глюк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 10:38:28 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
Поля где-то используете, где не следовало. Не только статические но и обычные. Контроллер и Transaction Script должны быть stateless. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 11:21:50 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
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, то его поля будут доступны только для запроса. и по окончании него этот объект помрет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 11:53:13 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
авторизация на сайте через что? если пользователя храните в спринг-бине, то у него по умолчанию апп-scope. ну и scope прочих бинов проверьте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 11:55:56 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
pavel_nvавторизация на сайте через что? если пользователя храните в спринг-бине, то у него по умолчанию апп-scope. ну и scope прочих бинов проверьте авторизацию делаю сам ручками. рисую сам форму в jsp, обрабатываю её в соответсвующем контроллере LoginController. если авторизация прошла успешно, то сохраняю в сессию ИД залогиненного юзера. и редирект на главную страницу (IndexController). а уже в IndexController опять по новое. если в сесии есть ИД юзера, то вытаскиваю его и полез в БД.(как описал выше) данные юзера тащу из БД и кладу в объект Member. его тоже каждый раз заново создаю. бины самого спринга не использую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:03:23 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
r u, может LoginController - сингтон? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:05:34 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
Логи нужно детальные писать. Тогда не придется гадать на форуме. Код: java 1. 2. 3. 4. Для всех юзеров, у которых случайно не оказалось _UID_ в сессии, env.UID равен 0? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:07:08 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
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. т.е. явно синглтоном я никого не делал. может это делает сам Спринг. я его плохо знаю еще. потому возможно и наворотил чтото не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:11:03 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
r u, вроде все бины в спринге по умолчанию синглтоны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:11:51 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczДля всех юзеров, у которых случайно не оказалось _UID_ в сессии, env.UID равен 0? ну да. раз неавторизован - значит гость. а гость видит только форму логина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:11:55 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
fercr u, вроде все бины в спринге по умолчанию синглтоны как сделать их НЕсинглтонами ? через указание scope Только? получается что любой объект сохданный мной в методе public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) будет синглтоном? опупеть. получается можно доверять только встроенным объектам request и response ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:15:31 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
нет, сам контроллер только будет синглтоном, что бы не создаваться каждый раз на каждый запрос. В методах идет обычный жизненный цикл. Да и синглтонг/не синглтон задается только в контейнере, вы же в методах с контейнером не работаете (на первый взгляд) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:26:00 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
r u, непонятно что у вас создается за объект. может через ThreadLocal надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:28:15 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
ferc, например, мне как-то нужно было чтобы для каждого юзера был свой класс со статичными полями, разрулилось через ThreadLocal ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:31:18 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
fercferc, например, мне как-то нужно было чтобы для каждого юзера был свой класс со статичными полями, разрулилось через ThreadLocal В spring mvc нормально поддерживаеться scope для бинов - request/session/singleton и другие. Самодельные велосипеды, как раз и приводят к тому, что кто-то где-то забыл ThreadLocal почистить и второй клиент получает данные первого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:34:39 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
fercr u, непонятно что у вас создается за объект. может через ThreadLocal надо? просто объект. я его использую как контейнер для всякой информации. в том числе и информации о том какой юзер сделал текущий запрос. Env env = new Env(request, response); public class Env { ... public int UID = 0; ... } ладно. щас попробую изменить scope у всех контроллеров на prototype. чтоб создавались заново всегда. если проблема исчезнет, значит по крайней мере я на правильном пути. и буду копать дальше. спасибо всем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:35:36 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, это было в vaadin ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:36:01 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
fercBlazkowicz, это было в vaadin Это очень важно в контексте вопроса про Spring MVC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:39:26 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
r uладно. щас попробую изменить scope у всех контроллеров на prototype. чтоб создавались заново всегда. если проблема исчезнет, значит по крайней мере я на правильном пути. и буду копать дальше. Вам в целом нужно архитектуру пересмотреть. Задача контроллера обработать Request, получить из него данные и забыть. А вы же тягаете Request внутри своего ENV зачем-то. Spring имеет кучу средств по - получению Bean-объекта из Request через маппинг или ещё как. - управлению scope, если объект связан с Session или Request. Вам не нужно самому работать с Servlet API. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 12:41:52 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВам не нужно самому работать с Servlet API. изначально от незнания делал свои велосипеды. согласен что в Спринг все плюшки уже придуманы. осталось только обучиться их правильному использованию. этим и займусь в свободное время. спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 13:02:03 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
r uладно. щас попробую изменить scope у всех контроллеров на prototype. чтоб создавались заново всегда. если проблема исчезнет, значит по крайней мере я на правильном пути. и буду копать дальше Загляни в конфиги - какие пользовательские бины ты прописал в контексте приложения, контексте сервлета. Если внимательно последить за логами Спринга во время деплоя приложения (в режиме отладки), можно заметить, что Спринг их синглтонами обзывает.. Скорее всего какому-то из них активно переписываешь свойства, потом отдаешь в реквест. Получилось вот такое однопользовательское веб-приложение. )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 13:17:12 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
r u осталось только обучиться их правильному использованию. этим и займусь в свободное время. спасибо Без знания архитектуры Спринга, научиться правильно использовать "плюшки" вряд ли получится. Только и останется, что методом копипаста приложения писать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 13:19:13 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
mesier переписываешь свойства, потом отдаешь в реквест. ) ну в респонс же! устал что-то к концу дня.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 13:21:19 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
r u, Во первых как тестируешь? Если из под одного браузера одновременно пытаешься тестировать работу нескольких пользователей, то возможно это вообще проблемы браузера. Второй кусок кода под сомнением это Env env = new Env(request, response); По спецификации объекты Respose и Request валидны только на протяжении обработки запроса. Web контейнер впринципе может использовать пул request\respose. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 14:31:27 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
vas0Во первых как тестируешь? Если из под одного браузера одновременно пытаешься тестировать работу нескольких пользователей, то возможно это вообще проблемы браузера. Второй кусок кода под сомнением это Env env = new Env(request, response); По спецификации объекты Respose и Request валидны только на протяжении обработки запроса. Web контейнер впринципе может использовать пул request\respose. Кеширование экземпляров с учетом современных GC это ущербная стратегия. Вряд ли сервер так делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 14:59:23 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
vas0Во первых как тестируешь? Если из под одного браузера одновременно пытаешься тестировать работу нескольких пользователей, то возможно это вообще проблемы браузера. нет. наиболее ярко проблема возникает как раз когда тестирование проходят параллельно много пользователей. локально сразу с нескольких браузеров я пытался повторить проблему - неудалось) чаще проблема всплывает когда юзают IE(7 в частности). но думаю это случайность. проблема именно в коде который я навоял, незная до конца тонкостей Спринга. я так думаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 19:12:26 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
r u, это что же у Спринга за тонкости такие, что без него писать можно, а с ним - 2 страницы нужно разбираться? Пример ведь прстейший - одно поле на логин записать в БД. Напиши ЕТО с использованием спрингового бина. Если у тебя модульная архитектура, то это на пол дня работы - HELLO World. PS - параллельно много пользователей - это сколько? - и что значит "локально сразу с нескольких браузеров"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 19:44:59 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
r u, вывеси тут адрес своего теста - мы его тут мигом протестируем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2012, 19:49:48 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
Petro123, структура то модульная, но изначально завязано все уже на Спринг. диспетчер, контроллеры, представление... переделать конечно можно, но я хотел именно разобраться и победить не отказываясь от спринга. паралельно обычно отвечают около 10 человек. немного. но глюк проявляется сразу адрес привести не могу - ибо он интранет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 06:14:55 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
r u переделать конечно можно, но я хотел именно разобраться и победить не отказываясь от спринга. паралельно обычно отвечают около 10 человек. немного. но глюк проявляется сразу Ну так ты проверил конфиги, как я тебе говорил? 13618633 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2012, 07:24:41 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
mesierНу так ты проверил конфиги, как я тебе говорил? да. сейчас работает временное решение(хотя нет более постоянного чем временное :)) ): в dispatcher-servlet.xml перечислены бины классов контроллеров. вот им всем я сделал scope="prototype". за несколько дней тестирования, проблема больше не повторялась. тоесть явно она была как раз в том что контроллеры лежали а контейнере как синглтоны и были общими для всех. теперь для каждого запроса рождаются новые. понимаю что костыль. и позже буду разбираться по мануалам как сделать все правильно. по Spring way. всем спасибо за советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2012, 05:42:32 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
Они и должны быть Singleton :) зачем тратить ресурсы на создание нового контроллера при запросе? хоть сессион скоп хотя бы сделай, если разбираться дальше не хочешь. Еще как вариант прикрутить Spring Security, там передача записи пользователя уже реализована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2012, 06:15:37 |
|
||
|
Spring web mvc. просачивается сессия чужого юзера. подскажите где искать косяк.
|
|||
|---|---|---|---|
|
#18+
r u тоесть явно она была как раз в том что контроллеры лежали а контейнере как синглтоны и были общими для всех. Ну вообще-то так и должно быть.. Задача контроллера - передавать запросы в сервис-слой. Который берет объекты модели, их обрабатывает, возвращает контроллеру, который затем передает их во Вью. А ты скорее всего объекты модели сделал принадлежащими контроллеру (синглтону) и с ними работаешь.. Проблема конкретно твоей задачи (точнее проблемКА) - хранение состояния объекта модели на протяжении всей сессии. Ну так есть много способов ее решения - хранить в сессии, БД, кэше. А вот ещё какой-то там WizardController вроде есть, погугли, может подойдёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2012, 06:41:20 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2130369]: |
0ms |
get settings: |
15ms |
get forum list: |
23ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
69ms |
get topic data: |
23ms |
get forum data: |
5ms |
get page messages: |
103ms |
get tp. blocked users: |
3ms |
| others: | 329ms |
| total: | 584ms |

| 0 / 0 |
