Spring MVC 3 - привязка параметров к вспомогательному объекту - PullRequest
4 голосов
/ 09 февраля 2010

Я пытаюсь настроить форму редактирования для моего User объекта. У меня автоматическая привязка из формы к объекту пользователя, работает нормально.

Мне интересно, как запретить злонамеренным пользователям привязываться к полям моего User объекта, к которому я не хочу этого делать?

Например, мой пользовательский объект имеет userName, а также points. Когда они нажимают кнопку «Изменить пользователя», я хочу, чтобы они могли изменять userName, но не points. Злонамеренный пользователь может просто отправить дополнительное points=429429 в виде скрытого поля в форме, отредактировав HTML, и это будет автоматически связано с объектом поддержки Spring.

Ответы [ 2 ]

4 голосов
/ 21 апреля 2010

Добавьте это к вашему контроллеру:

@InitBinder
protected void initBinder(WebDataBinder binder) {
 binder.setAllowedFields("field1", "field2");
}
4 голосов
/ 09 февраля 2010

Я бы предложил отделить ваш код переднего плана от логики для того, что будет сохранено в базе данных. Объект поддержки формы просто предназначен для того, чтобы быть простым объектом, который захватывает то, что пользователь сделал в представлении ... его не следует использовать для сохранения непосредственно в базе данных. Я бы хотел, чтобы сервисный уровень обрабатывал решение о том, обновлять или нет определенные поля ... контроллер должен просто получать входные данные и передавать их. Таким образом, служба может решить, какие поля следует обновить.

public void updateUser(long userId, User updatedUser) {
    User currentUser = dao.getCurrentUserById(userId);
    currentUser.userName = updatedUser.username;
    //...... update anyother fields....
    dao.SaveUser(currentUser);
}

или вы можете определить метод так, чтобы вызывающая сторона знала, что будет обновлено:

public void updateUser(long userId, String updatedUsername);

Я бы также сказал, что это намного проще для модульного тестирования, если эта логика находится на уровне обслуживания.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...