ORM mapping & Spring form controllers
в Spring отлично поставлена работа с бинами. Постоянно встречаются конструкции когда бин приходит через запрос от пользователя и чуть ли не сразу же отправляется в базу. И мы их с радостью применяем т.к. это удобно и весьма сокращает время разработки (кому не сокращает - вы или не привыкли или у вас IDE плохой или еще что-то неверно делаете.)
Security exception:
если бин имеет линкованные бины, например
class User {
String name;
String password;
User friend;
}
то передав в параметрах формы, например которая разрешает юзеру поменять имя, friend.password, Spring тупо изменит нам поле пароля линкованного объекта "друга" (другого юзера), хотя мы на это даже не рассчитывали. Вот оно - чудеса автоматизации. Всё это прекрасно в Web 2.0 для вакуума или коммунизма, однако у нас на первом месте всё-таки секурити. Екзепшн пропускается даже если применяются customPropertyEditors, т.е. свинья сначала вызовет Editor чтоб подгрузить объект а потом нагло изменит его содержимое.
Решения два:
- (официальное). Использовать валидаторы для каждой формы и нещадно репортить ошибки на каждый незнакомый элемент. Минус очевиден - забыл валидатор и базе кирдык.
- (наше). Вместо SimpleFormController использовать собственный контроллер-наследник, который вообще не пропускает ни одной переменной, кроме тех что явно описаны в файле конфигурации Spring.
если бин не линкуется на другие, можно так же использовать функции копирования бина с чётким перечнем параметров (если линкуется - это не поможет, т.к. копируется только линк) но это уже частные случаи.
__________
«Элитпаркет» - качественный паркет и ламинат от производителей со всей Европы.

Оставить комментарий