Веб-приложение 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 на стороне клиента должно быть достаточно.
Приложите реальные усилия на стороне сервера, а затем, если у вас еще есть время и бюджет, улучшите клиентскую часть.