Укрепить состояние гонки в сервлете

Я получаю следующую аннотацию для нескольких похожих строк кода:

Класс LabResult является одноэлементным, поэтому поле testname является общим для пользователей. В результате один пользователь может видеть данные другого пользователя.

Где это строка кода:

public void setTestname(String testname) {
    this.testname = testname;
}

У меня 57 таких ошибок, так как это происходит практически в каждой форме. Действительно ли здесь есть ошибка безопасности?


person pedrum golriz    schedule 25.06.2015    source источник


Ответы (2)


Я предполагаю, что код, который вы показали, является частью класса LabResult. Судя по названию класса, я предполагаю, что вы создаете более одного объекта этого класса, поэтому вы не хотите использовать синглтон (который является классом, ограниченным только одним экземпляром самого себя). В противном случае один пользователь установит поля в этом классе, а затем другой пользователь перезапишет эти данные, а затем первый пользователь получит обратно данные другого пользователя. Вероятно, это не то, что вы хотите.

person forgivenson    schedule 25.06.2015
comment
Информация предназначена для совместного использования, поэтому я предполагаю, что тогда можно будет использовать ее из синглтона. - person pedrum golriz; 25.06.2015
comment
Я только догадывался, основываясь на ограниченной информации, которую вы предоставили. Если вы предоставите больше информации об этом классе (что это такое, как он используется и т. д.), тогда люди смогут дать лучший совет. - person forgivenson; 25.06.2015

По сути, любая переменная экземпляра должна быть постоянной, то есть «статической конечной», но в случае, если ваша переменная экземпляра не имеет окончательного значения, мы можем объявить ваше тестовое имя, как показано ниже.

private static volatile testname;

Подробности можно найти здесь. Условие гонки — проблема с членом поля

person Manas    schedule 25.12.2018