|
|
|
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 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38075499&tid=2130369]: |
0ms |
get settings: |
12ms |
get forum list: |
24ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
59ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 296ms |
| total: | 495ms |

| 0 / 0 |
