2011-02-10 18 views
6

Tengo un problema. Tengo dos aplicaciones web desplegadas como guerras. Vamos a llamarlos app1.war y app2.war.Dos aplicaciones web en un dominio con diferentes raíces de contexto?

me gustaría app1.war para acceder a la URL www.website.com y me gustaría app2.war para ser accesible como www.website.com/anotherapp. Tengo mi nombre de dominio listo.

El alojamiento virtual no parece ayudar aquí.

Estoy ejecutando JBoss App Server 5.1 y Seam 2.2.0. Estoy trabajando en la integración de un foro (desplegado como guerra) con mi aplicación (desplegada como otra guerra) y, por lo tanto, necesito utilizar el inicio de sesión único y, por lo tanto, me gustaría que los formatos URL descritos anteriormente faciliten el paso de cookies sso.

Gracias por cualquier idea.

-Charles.

Respuesta

4

Usted necesita hacer tales cosas:

  1. Configure su JBoss para usar un host virtual con el nombre www.website.com.

    Puede hacerlo editando server.xml del directorio jbossweb.sar. En resumen, debe configurar otra directiva Host.

  2. Tienes que configurar tu aplicación war. Puede hacerlo creando o editando el archivo jboss-web.xml (debe colocarse en el directorio WEB-INF). En ese archivo puede configurar qué host virtual se debe usar y en qué contexto.

Ejemplo de ese archivo para app1.war

<jboss-web> 
    <context-root>/</context-root> 
    <virtual-host>website</virtual-host> 
</jboss-web> 

Ejemplo de ese archivo para app2.war

<jboss-web> 
    <context-root>/anotherapp</context-root> 
    <virtual-host>website</virtual-host> 
</jboss-web> 

Más información se puede encontrar en ese puesto Hosting Multiple Domains With JBoss

+0

¡fantástico! esto es lo que necesitaba. Ya tenía archivos jboss-web para ambas aplicaciones pero no se me había ocurrido que era posible que ambos trabajaran con el mismo host virtual. Entonces, para la aplicación 1 tenía un host virtual de 'app1' y para app2.war, el host virtual era 'app2'. Cambié las entradas de host virtual a la de app1 y especifiqué el contexto para app2 en lo que necesitaba. Muchas gracias. Solución limpia que necesitaba. – donakalz

1

No he usado JBoss por un tiempo o Seam, pero si es como la mayoría de los servidores de aplicaciones, habrá un archivo XML de alguna descripción donde se combinan los patrones de URL con las aplicaciones. Compruebe que documentación para más detalles, pero creo que quieres web.xml y unas pocas entradas de servlets como:

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.seam</url-pattern> 
</servlet-mapping> 

cambiar la URL de patrón y servlets en consecuencia.

+0

Hmmm . bueno ... eso no es lo que estoy buscando. Sé sobre servlets y url-patterns. Tal vez debería intentarlo de nuevo. Tengo dos aplicaciones web de costura. Cada aplicación funciona bastante bien. Cada aplicación consta de páginas jsf, servlets y lo que no. Ese no es el problema. He señalado mi nombre de dominio, www.domain.com (he sustituido 'dominio' para el nombre de mi sitio real) a app1.war usando el mecanismo de alojamiento virtual jboss. Todo esta bien. Ahora, app2.war es otra aplicación (jsp) que se sirve a través del dominio, app2.domain.com (también usa hosting virtual nativo del servidor de aplicaciones jboss). – donakalz

+0

Ahora tengo un mecanismo de autenticación en app1.war y la información de los usuarios se almacena en una base de datos. Me gustaría implementar sso para registrar automáticamente usuarios en app2.war (app2.domain.com). Sin embargo, me gustaría aprovechar la gran funcionalidad de las cookies. Las cookies almacenadas para un dominio, por ejemplo www.dominio.com, también son accesibles para cada solicitud de recursos bajo ese dominio. por ejemplo, www.domain.com/foo.html o www.domain.com/foo/bar.html pueden acceder a las mismas cookies. – donakalz

+0

Con mi configuración actual de ambas aplicaciones, la primera aplicación crearía cookies bajo el dominio www.domain.com mientras que la segunda crearía cookies bajo app2.domain.com. Esto es un problema para mí, ya que una aplicación escrita en el navegador del cliente por app1 (www.domain.com) no sería accesible para app2 (app2.domain.com). Ahora llego a la pregunta de nuevo. ¿Alguien conoce una forma elegante de acceder a app2 como un subcampo de la aplicación1? Así que me gustaría acceder a la aplicación 1 como www.dominio.com y la aplicación 2 como www.dominio.com/app2. – donakalz

1

me gustaría app1.war a acceder en la siguiente dirección: www.website.com y me gustaría app2.war ser accesible como www.website.com/anotherapp. Por supuesto, tengo mi nombre de dominio listo.

La manera más fácil de lograr su caso de uso específico es desplegar app1.war en ROOT.war y app2.war en anotherapp.war en el directorio/deploy. Esto funciona mejor cuando usa implementaciones de guerra explosionadas.

Si no desea cambiar el nombre de las carpetas de guerra explosionadas, puede usar el enlace simbólico.

+0

Sí, sé de ese truco. Sin embargo, no quiero eliminar el ROOT.war existente en el directorio/deploy del servidor de mi jboss. Esto se debe a que ROOT.war es la aplicación con la página que contiene enlaces a la consola de administración, a la consola de jmx y más. Solo digamos que me gustaría poder eliminar mi app1.war y app2.war, deshabilitar el hosting virtual y esencialmente tener el contenedor como estaba (jboss nuevo). En este momento, asigné admin.domain.com a mi ROOT.war. Este no es el problema. Solo necesito saber si alguien tiene una solución para mi caso de uso tal como lo describí. – donakalz

1

para tener la misma cookie de sesión para todas las aplicaciones web en el contenedor de servlets, añadir SessionCookie para desplegar/jbossweb.sar/context.xml:

<Context> 
... 
<SessionCookie path="/" /> 
</Context> 

Si no desea cambiar el nombre de ROOT.war a otra cosa y dejar que app1.war obtenga el ROOT.war-name (no entiendo por qué no), tal vez pueda hacer algo de apache redirigir/reescribir/proxy para ocultar la raíz de contexto real de la aplicación1

+0

porque no quiero modificar innecesariamente mi carpeta jboss. Quiero poder implementar aplicaciones en él, usarlo, eliminar las aplicaciones y recuperar el estado original del servidor. Además, las personas tienden a eliminar ROOT.war y/o cambiar el nombre de sus aplicaciones a ROOT.war solo para permitir que esa aplicación tenga el privilegio de ser la aplicación raíz en el servidor (normalmente accedido por localhost o www.website.com si ha apuntado su dominio a su servidor jboss ip). Simplemente puede usar el alojamiento virtual. Tu respuesta con la etiqueta SessionCookie parece interesante. Probaré las cosas e informaré. – donakalz

Cuestiones relacionadas