лучшие практики выполнения внешних программ в веб-приложениях Java - PullRequest
0 голосов
/ 20 октября 2011

У меня есть Java-приложение (на самом деле это Grails), мне нужно выполнить внешнюю программу. Желательно, чтобы мое приложение было автономным, то есть внешние скрипты / программы были частью файла war. Этот внешний скрипт / программа также должен создавать некоторые файлы.

Полагаю, у меня вопрос: есть ли какие-то рекомендации, как делать такие вещи, чтобы конечный продукт не был слишком ненадежным в зависимости от разрешений приложения, а что нет?

Ответы [ 3 ]

0 голосов
/ 20 октября 2011

Безопасность - убедитесь, что ваше приложение не позволяет выполнять произвольный (предоставленный пользователем) код в хост-системе. Подумайте об атаках в стиле SQL-инъекций. Если вам нужно передать данные, я предлагаю сначала вставить их в базу данных, а затем передать первичный ключ внешнему процессу, это поможет избежать ситуаций с переполнением буфера.

Надежность - может ли эта программа выйти из строя или потребовать много времени или иметь другие неизвестные побочные эффекты Изолируйте основное веб-приложение от этой программы, выполнив его из другого потока или даже из другого процесса.

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

0 голосов
/ 20 октября 2011

Вы можете разработать небольшую административную систему, которая будет отслеживать запросы на обслуживание. Это был бы очень полезный компонент, так как большинство проектов имеют такую ​​цель.

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

0 голосов
/ 20 октября 2011

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

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

Кроме того, вы хотите выполнить очистку после запуска программы и, если она выдаст какой-либо вывод.

Вы должны быть осторожны, если пользователь может передавать вредоносные команды в вашу систему и пытается взломать другие приложения.

В целом, вы должны быть осторожны с безопасностью и правильностью (первая схема, которую я упомянул).

...