Puede desencadenar una aplicación Wicket un reinicio de sí mismo sin una contraseña de administrador?

StackOverflow https://stackoverflow.com/questions/1850122

  •  13-09-2019
  •  | 
  •  

Pregunta

Soy nuevo en el portillo y me gustaría mantener una aplicación web desde el interior de sí mismo utilizando algún tipo de página de administración de mantenimiento para el funcionamiento de limpieza, actualizaciones de base de datos, recuperación y así sucesivamente. Dado que planeo usar Hibernate o similar para el enlace de datos me gustaría provocar un reinicio completo de la aplicación desde dentro de sí mismo, sin dar a todo el mundo que va a ser capaz de ejecutar estas acciones del gestor de contraseñas que acompaña Tomcat.

En lo que descubrí, no parece haber una manera fácil de desencadenar un verdadero reinicio de una aplicación web Java sin la contraseña del administrador? Sin embargo, ya que hay muchas aplicaciones web Java que tienen dicha funcionalidad de reinicio en sus paneles de administración, supongo que debe ser posible activar un reinicio, ya sea en contenedores de servlets específicos o algunos marcos web. Que de alguna manera tienen que hacer el truco? (O tal vez en realidad no se reinician desde cero pero sólo REINITIALIZE sin un reinicio limpio?)

No pude encontrar nada acerca de Wicket o Tomcat ser capaz de ser activado con un apagado y reinicio de sus aplicaciones, aunque hay algunos métodos internos en Wicket que podrían ser capaces de hacer eso? (Se puede acceder públicamente pero JavaDoc informa en contra de ella, ya que son sólo para uso interno)

Desde el punto de vista de seguridad realmente no veo por qué una aplicación no debería ser capaz de solicitar un reinicio por ejemplo a partir de su propio código.

¿Es posible hacerlo y en caso afirmativo, ¿qué voy a tener que hacer en mi aplicación a lo reanudan?

Editar Sólo para hacer mi pregunta más precisa: El usuario ni la aplicación deben tener cualquier contraseña que podría ser utilizado para acceder a la interfaz del gestor de Tomcat. Estaba pensando en algún método para llamar o algún indicador para ajustar con el contenedor de servlets ser activado para reiniciar la aplicación respectiva y sin necesidad de autorización para hacerlo. Mis pensamientos son que, dado que la aplicación se ejecuta en un contenedor de servlets debe tener alguna forma de apagar y volver a funcionar. Si eso no es posible, en general, con servidores de aplicaciones Java, puede haber alguna manera de hacerlo en el nivel de aplicación al hacer una llamada a la estructura subyacente (peatonal incorporada en este caso) para poner fin a todos los subprocesos que se ejecutan, limpiar lo más posible y reinicio la aplicación con el marco; algo así como un "reinicio suave" de la pila de aplicación.

¿Fue útil?

Solución

Es más que nada irrelevante para su pregunta que su aplicación está utilizando peatonal incorporada. Es una aplicación Java Web utilizando el marco Wicket. Redactado de esta manera, su buscar cómo reiniciar una aplicación web, utilizando el contenedor Tomcat. Si elige otro contenedor de aplicaciones web (embarcadero etc), entonces usted tendría que cambiar el procedimiento.

Usted puede golpear este URL para iniciar una aplicación: http://localhost:8080/manager/start?path=/myapp y http://localhost:8080/manager/stop?path=/myapp para detener su aplicación. Cambiar / miaplicacion a su contexto aplicaciones, y tiene inicio / parada de control.

A continuación, puede hacer frente a problemas de contraseña internamente en su código.

A la luz de la aclaración que mira esta documentación Tomcat y el uso de JMX. Sin embargo, incluso JMX está protegido por contraseña. No existe una norma para conseguir en los controles contenedores de su aplicación web.

Otros consejos

Estoy intentando pensar si / qué otros frameworks web realmente lo soportan. Creo que Jim es el de señalar que el nivel adecuado de la solución. Independientemente de qué marco se utiliza un contenedor web debe permitir el reinicio de una aplicación web contenida. Tomcat requeriría la aplicación de gestión que esté disponible. Parece que (desde mi googling) que embarcadero expone esta funcionalidad a través de JMX MBeans. Por lo que la funcionalidad de reinicio puede no ser portátiles entre los contenedores.

Para que esto sea portátil, en cualquier marco, creo que tendría que aislar lo que las cosas son necesarias para reiniciar. Si se trata de hibernación re-inicializar la sesión de fábrica. Si se trata de la configuración de la primavera, esto puede ciertamente ser más intrusivo, pero el reemplazo o la reconfiguración de los granos parece el camino a seguir. Si se trata de i18n o recursos de marcado portillo que considera que pueden ayudar con eso ya.

También animo a echar un vistazo a JMX. Puede desactivar la autenticación para JMX en cuyo caso, asegúrese de que el puerto JMX no es accesible desde internet (un filtrado del puerto en el servidor de seguridad basado en host, o se unen sólo a una dirección IP local). JMX tenía la intención de estandarizar el seguimiento y control de las aplicaciones, los contenedores en un mundo Java EE a distancia, así que más o menos proporciona la infraestructura que está buscando.

O, alternativamente, utilizar otro contenedor web (preferiblemente un incrustado uno) y manejar incluso reinicios de contenedores desde el código Java.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top