Веб-приложение Struts: многоразовая проверка на стороне клиента и на стороне сервера

Наше приложение Struts дублирует множество проверок правильности форм: (1) на стороне клиента в jQuery/JS и (2) отдельно, на стороне сервера в Java.

Я спросил моего лидера, почему, и он сказал: "Вы никогда не можете доверять стороне клиента". Но, с другой стороны, для удобства он хочет обеспечить проверку JS/jQuery в браузере.

Существует много избыточного кода. Какова правильная стратегия для повторного использования валидации с обеих сторон? Люди вручную дублируют проверку на стороне клиента или на стороне сервера в эти дни?

1 ответ

Решение
  • Проверка на стороне сервера обязательна: запрос может поступать с измененной веб-страницы, например, с правилами, измененными с помощью FireBug или любого вида DevTools. Или, что еще проще, запрос может быть обработан злонамеренным пользователем со страницы (или из блока javascript, или иного), созданной по принципу ad-hoc, полностью минуя вашу страницу.

Думайте об этом как о двери вашего дома: с ней никто без правильного ключа не может войти. Без него любой может войти.

  • Проверка на стороне клиента удобна для пользователя и производительности: она предотвращает ожидание отрицательного ответа сервера, предотвращает переполнение сети неправильными запросами, которые могли быть остановлены (учитывая количество пользователей и возможность загрузки файлов). наряду с данными формы, это может очень скоро достичь критической массы).

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

Вам необходимо применить проверку на стороне сервера, которая в случае Struts2 либо validate() или же validateXXX() метод или XML Validation или используя аннотации (с встроенным аннотацией Struts2 для каждого действия или с помощью https://github.com/umeshawasthi/jsr303-validator-plugin от @UmeshAwasthi для каждого объекта).

Если вы хотите повторно использовать проверку на стороне сервера в качестве проверки на стороне клиента, вы можете использовать плагин Struts2-jQuery, как описано в этом ответе.

Кстати, HTML5 (с запасными вариантами) и базовая проверка JQuery на стороне клиента должно быть достаточно.

Приложите реальные усилия на стороне сервера, а затем, если у вас еще есть время и бюджет, улучшите клиентскую часть.

Другие вопросы по тегам