Я работаю над страницей, которая позволяет пользователям редактировать информацию профиля. Я хочу, чтобы они могли редактировать свою общедоступную информацию, но не позволяли им изменять системные флаги, такие как тип пользователя.
Это реализовано с помощью 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
как «истина», он может установить это поле, когда не должен t.
Я знаю, что могу создать отдельный объект "формы" только с полями, которые я хочу изменить, и использовать его для автоматической привязки. (копия поверх данных). Проблема в том, что у меня есть много мест, где используется эта техника. (для пользователя и других объектов). Было бы сложно поддерживать, когда я хочу добавлять поля.
Есть ли способ использовать аннотации или другие методы в Spring MVC для внесения параметров в белый список и предотвращения изменений произвольных свойств объекта домена?