Что мне нужно сделать, это запустить приложение Java, которое является ссылкой на сервер службы RESTful от Restlet. И эта услуга будет вызвана другим приложением, работающим в Google App Engine.Открытие порта 80 с Java-приложением на Ubuntu
Из-за ограничения GAE каждый HTTP-вызов ограничивается портами 80 и 443 (http и https) с классом HttpUrlConnection. В результате мне нужно развернуть приложение на стороне сервера на порту 80 или 443.
Однако, поскольку приложение работает на Ubuntu, а для тех портов под 1024 не может быть доступен пользователь без полномочий root, тогда Access Denied исключение будет выбрано при запуске моего приложения.
Решения, которые приходят в мой разум включает в себя:
Изменение политики безопасности JRE, что файлы находятся в /lib/security/java.policy, чтобы grantjava.net.SocketPermission " * .80 "" слушать, подключаться, принимать, разрешать "разрешение. Однако, не используя командную строку для включения этого файла или переопределяя содержимое в файле java.policy JRE, такое же исключение продолжает выходить.
попытайтесь войти в систему как пользователь root, однако из-за моей незнакомости с Unix я не знаю, как это сделать.
еще одно решение, которое я не пытался, - сопоставить все вызовы с 80 до более высокого порта, такого как 1234, после чего я смогу развернуть мое приложение на 1234 без проблем, а запрос отправки запроса GAE на порт 80. Но как подключиться недостающий пробел по-прежнему остается проблемой.
В настоящее время я использую «взлом» метод, который должен упаковать приложение в файл банка, и Судо запустив файл банки с корневой привилегией. Он работает сейчас, но определенно не подходит в реальной среде развертывания.
Так что если кто-нибудь хоть подумает о решении, спасибо большое!
На ubuntu вы можете войти в систему как пользователь root, запустив 'sudo -i', который даст вам временное, если не идеальное решение. – 2010-03-15 01:46:15
На самом деле, услуги, которые необходимо прослушивать в портах <1024, обычно начинаются с имени root, чтобы получить необходимые разрешения. Однако после открытия портов они меняют свой идентификатор пользователя на менее привилегированный, выполняя некоторые системные вызовы, специфичные для Unix. Java не поддерживает это, поскольку он должен быть независимым от платформы. Тем не менее, есть некоторые сторонние библиотеки, которые предоставят вам доступ к системному API Unix/Linux за счет переносимости. Ищите «POSIX» и «Java», если вас интересует эта тема. Экспедирование с использованием iptables, конечно же, является предпочтительным и самым простым решением. –
@ the-banana-king Спасибо за ваш совет, и да, это действительно полезно, поскольку я никогда не думал о том, чтобы делать что-то из Java lib, чтобы манипулировать на Unix-системах. –