Я работаю над страницей, которая позволяет пользователям редактировать информацию профиля. Я хочу, чтобы они могли редактировать свою общедоступную информацию, но не позволяли им изменять системные флаги, такие как тип пользователя.
Это реализовано в Spring MVC (3.0). Объект User имеет типичные поля, такие как firstName
, lastName
, email
(все должны быть редактируемыми) и логическое значение administrator
(которые не должны редактироваться.
Мой метод выглядит примерно так:
@RequestMapping(method = RequestMethod.POST)
public String doEdit(
@ModelAttribute("user") User user,
BindingResult result,
ModelMap model)
throws IOException
{
// validate, blah blah
// save user object
// return page
}
Моя форма содержит поля firstName
, lastName
и т. Д. И, кажется, работает нормально.
Проблема заключается в том, что если злонамеренный пользователь отправляет запрос с параметром administrator
как "true", он может установить это поле, если не должен.
Я знаю, что могу создать отдельный объект "формы" только с полями, которые я хочу изменить, и использовать его для автоматической привязки. (копия данных). Проблема в том, что у меня есть много мест, которые используют эту технику. (для пользователя и других объектов). Было бы сложно поддерживать, когда я хочу добавить поля.
Есть ли способ использовать аннотации или другие методы в Spring MVC для внесения в белый список параметров и предотвращения изменений в свойствах произвольных доменных объектов?