Struts2 серьезная проблема безопасности? - PullRequest
0 голосов
/ 08 декабря 2011

Я работаю со Struts2, Hibernate и Spring и использую модель управляемой модели.Кажется, существует серьезная проблема при попытке получить объект одновременно с двумя разными пользователями и сессиями (также с разными компьютерами).

Подробнее ... Допустим, у нас есть объект Project, которыйимеет 2 участника - имя пользователя и имя.Оба пользователя будут пытаться получить свой объект Project (который, разумеется, является другим объектом для другого пользователя).Таким образом, у пользователя А будет проект с идентификатором 498, а у пользователя Б - проект с идентификатором 499.

Действие Struts будет распознавать, что они пытаются получить объект с другим идентификатором, но кажется, что обапользователи имеют один и тот же экземпляр объекта Project и поэтому видят один и тот же результат.Вы можете увидеть в журнале, представленном здесь:

2011-12-08 14:07:21 LoginInterceptor [INFO] Пользователь 17 вызывает populateProject, params: id = 499 2011-12-08 14:07:21LoginInterceptor [INFO] Пользователь 4 вызывает populateProject, params: id = 498 2011-12-08 14:07:21 ProjectAction [INFO] Obj: hbn.Project@e2df60d, идентификатор пользователя сеанса равен 17, obj.user.id равен 42011-12-08 14:07:21 ProjectAction [INFO] Obj: hbn.Project@e2df60d, идентификатор пользователя сеанса - 4, obj.user.id - 4

Как я могу это решить?

Спасибо, Рон.

1 Ответ

3 голосов
/ 08 декабря 2011

Согласно нашей дискуссии, я публикую информацию о причине проблемы и ее решении.Область действия не была установлена ​​для действия, создаваемого плагином Spring, и по умолчанию они имеют область действия singleton.В Struts2 каждое действие также работает как объект домена, поэтому Struts2 всегда создает новый экземпляр действия для каждого запроса и помещает его в стек значений.

в указанном выше случае область действия была singleton, что и стало причиной проблемыпоскольку оба пользователя имеют один и тот же объект действия, передаваемый пружиной из-за singleton scope .Setting scope=prototype решенная проблема

, для получения более подробной информации обратитесь к официальной странице плагина

Struts2-Springплагин

...