0

Я использую Spring 3.2, и я ищу способ, которым я могу заставить контроллеры указать, какие атрибуты разрешены для привязки, поэтому злонамеренные пользователи не могут вводить значения в связанные объекты. Весна рекомендует использовать setAllowedFields() в белый список/setDisallowedFields() в черный список.Создание глобальной initBinder с использованием Spring

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

Так можно ли получить этот белый список? Есть ли способ получить видимые атрибуты в форме?

Спасибо.

+0

Можете ли вы объяснить немного лучше, что вы пытаетесь сделать? Я не совсем понимаю, что вы пытаетесь решить здесь. 'InitBinder()' используется для указания Spring, как преобразовать данные String из UI-сообщения в атрибут объекта/модели домена. – CodeChimp

+0

О, извините. Поэтому давайте скажем, что у меня есть форма, которая содержит firstname, lastname, является администратором или нет (скажем, isAdministrator). Имя и фамилия видны, поэтому пользователи могут изменять эти два параметра. Однако они не видят атрибут isAdministrator, отправляя конкретный запрос, который они могут изменить. Я хочу, чтобы получить видимые атрибуты динамически, потому что у меня большое приложение, и создание белого списка/черного списка вручную будет носить суровый характер. Я использую метод initBinder() 'ConfigurableWebBindingInitializer', таким образом, я могу глобально заставить контроллеры. – AnnH

+0

Если вы помещаете атрибут Model Attet в сеанс, почему вы накладываете isAdministrator на страницу вообще? Если вы установите его в атрибуте модели и установите его как атрибут сеанса, то значение будет оставаться повсюду и вообще не будет видимым для пользователя. – CodeChimp

ответ

0

Вы можете реализовать RequestDataValueProcessor, особенно метод processFormFieldValue. Вы можете создать коллекцию разрешенных имен полей, сохранить это в сеансе.

Далее вы должны расширить ConfigurableWebBindingInitializer и переопределить метод initBinder. Что бы получить сбор и предварительно настроить WebDataBinder там.

И, наконец, вам понадобится какая-то конфигурация для соединения всего вместе.

Ссылки

  • RequestDataValueProcessorjavadoc
  • ConfigurableWebBindingInitializerjavadoc
+0

Могу ли я спросить вас, как работает «RequestDataValueProcessor» и как его метод вызывается? Я заметил, что у него есть четыре метода, и я должен их реализовать. В чем разница между ними? – AnnH

+0

'RequestDataValueProcessor' вызывается библиотекой тегов форм Spring (если она найдена в' ApplicationContext' 'DispatcherServlet'). Возможно, вы захотите проверить javadoc (добавьте ссылку на ответ). –

Смежные вопросы