Защита определенных полей при привязке в Spring

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

Это реализовано с помощью 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 для внесения параметров в белый список и предотвращения изменений произвольных свойств объекта домена?

9
задан Will Glass 16 February 2011 в 22:13
поделиться