Может ли приложение Wicket инициировать перезапуск без пароля администратора? - PullRequest
0 голосов
/ 05 декабря 2009

Я новичок в Wicket и хотел бы поддерживать веб-приложение изнутри, используя какую-то страницу администрирования для выполнения очистки, обновлений БД, восстановления и так далее. Поскольку я планирую использовать Hibernate или аналогичный для привязки данных, я хотел бы запустить полную перезагрузку приложения изнутри себя, не давая всем, кто сможет выполнить эти действия, пароль администратора Tomcat.

Насколько я выяснил, похоже, не существует простого способа вызвать реальный перезапуск веб-приложения Java без пароля администратора? Однако, поскольку многие веб-приложения Java имеют такие функции перезапуска в своих административных панелях, я предполагаю, что должна быть возможность инициировать перезапуск либо в определенных контейнерах сервлетов, либо в некоторых веб-инфраструктурах. Они как-то должны делать свое дело? (или, может быть, они не перезагружаются с нуля, а просто инициализируются без перезагрузки?)

Я не смог найти что-либо о том, что Wicket или Tomcat могут запускаться с выключением и перезапуском из их приложений, хотя в Wicket есть какие-то внутренние методы, которые могут это сделать? (может быть доступен публично, но JavaDoc рекомендует против него, поскольку они предназначены только для внутреннего использования)

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

Можно ли это сделать, и если да, что мне нужно будет сделать в моем приложении, чтобы оно было перезапущено?

Редактировать: Просто, чтобы уточнить мой вопрос: ни у пользователя, ни у приложения не должно быть паролей, которые можно было бы использовать для доступа к интерфейсу менеджера Tomcat. Я думал о каком-то вызываемом методе или о каком-либо флаге, который должен был запускать контейнер сервлета для перезапуска этого конкретного приложения без необходимости авторизации для этого. Я думаю, что, поскольку приложение работает в контейнере сервлета, оно должно быть каким-то образом отключено и перезапущено. Если это вообще невозможно с серверами приложений Java, может быть какой-то способ сделать это на уровне приложений, вызвав базовую структуру (в данном случае Wicket), чтобы завершить все запущенные потоки, очистить как можно больше и перезапустить приложение, использующее фреймворк; что-то вроде «мягкой перезагрузки» стека приложений.

Ответы [ 3 ]

2 голосов
/ 05 декабря 2009

Ваш вопрос в основном не имеет отношения к тому, что ваше приложение использует Wicket. Это Java-приложение, использующее инфраструктуру Wicket. В общем, вы ищете, как перезапустить веб-приложение, используя контейнер Tomcat. Если вы выберете другой контейнер веб-приложения (причал и т. Д.), Вам придется изменить процедуру.

Вы можете нажать этот URL, чтобы запустить приложение: http://localhost:8080/manager/start?path=/myapp и http://localhost:8080/manager/stop?path=/myapp, чтобы остановить приложение. Измените / myapp в соответствии с контекстом ваших приложений, и вы получите контроль запуска / остановки.

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

В свете ваших разъяснений вы можете взглянуть на эту документацию tomcat и использовать JMX. Однако даже JMX защищен паролем. Не существует стандарта для доступа к элементам управления контейнером из вашего веб-приложения.

1 голос
/ 21 декабря 2009

Я пытаюсь подумать, действительно ли другие веб-фреймворки поддерживают это. Я думаю, что Джим собирается указать на правильный уровень решения. Независимо от того, какая платформа используется, веб-контейнер должен допускать перезапуск содержимого веб-приложения. Tomcat потребует, чтобы приложение менеджера было доступно. Похоже, что (из моего поискового запроса), что Jetty предоставляет эту функциональность через JMX MBeans. Поэтому функция перезапуска может не переноситься между контейнерами.

Чтобы сделать это переносимым, в любой среде, я думаю, вам придется выделить то, что нужно для перезапуска. Если это спящий режим, переинициализируйте фабрику сеанса. Если это весенняя конфигурация, это, безусловно, может быть более навязчивым, но замена или перенастройка bean-компонентов кажется правильным. Если это i18n или калитка ресурсов разметки, я думаю, это уже поможет.

0 голосов
/ 27 декабря 2009

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

Или, в качестве альтернативы, используйте другой веб-контейнер (желательно встроенный) и обрабатывайте даже перезапуски контейнеров из вашего кода Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...