Problema de SendRedirect con Dispatcher y Websphere

Problema, Pregunta

Configuración: IHS Webserver con módulo Dispatcher configurado, que, a su vez, apunta a un servidor de aplicaciones Websphere donde se está ejecutando una instancia CQ. Una clase o un script jsp de CQ llama al método response.sendRedirect() que resulta en una redirección incorrecta: el nombre del servidor interno y el puerto de la aplicación Websphere, que no es accesible desde el exterior, se expone en el encabezado de respuesta de la ubicación que se utiliza para hacer la redirección real.

La causa principal de este problema es la propia Websphere, ya que la implementación del método HttpServletResponse#sendRedirect() de IBM está directamente influenciada por los encabezados de solicitud personalizados, generados de forma predeterminada por el complemento IHS de Websphere. Esto se considera un problema de bloqueo de proveedores de IBM.

Resolución, Respuesta

Usando mod_headers en el servidor web de IHS es posible pasar encabezados específicos de Websphere al servidor de aplicaciones añadiendo dichos encabezados con la directiva RequestHeader. Además, estos encabezados personalizados deben estar explícitamente permitidos en la configuración de Dispatcher, de lo contrario serán ignorados.

Ejemplo:

  • dominio público: http://www.mydomain.com

Configuración IHS

Edite el archivo de configuración httpd.conf del servidor web de IHS y haga lo siguiente:

  • asegúrese de que el módulo mod_headers está presente y cargado
  • añadir encabezados específicos WAS utilizando la directiva RequestHeader

Ejemplo (extracto de httpd.conf):

...
LoadModule headers_module modules/mod_headers.so
...
<Directory />
    <IfModule disp_apache2.c>
        # set custom Websphere headers
        RequestHeader set $WSSN www.mydomain.com
        RequestHeader set $WSSP 80
  
        SetHandler dispatcher-handler
    </IfModule>
    Options FollowSymLinks
</Directory>

Dispatcher configuration

En el nivel de Dispatcher, es necesario añadir la lista de encabezados de solicitud configurados anteriormente a la lista de encabezados de cliente que Dispatcher reenviará a la pista de renderizado definida, en este caso el servidor de aplicaciones Websphere.

Haga lo siguiente:

  • editar el archivo de configuración dispatcher.any
  • localizar la sección /clientheaders y añadir encabezados adicionales que se incluirán
  • reiniciar IHS

Ejemplo (extracto de dispatcher.any):

...
  /clientheaders
    {
    ...
    "$WSSN"
    "$WSSP"
    }
...

Configuración de Websphere

El encabezado $WSSP de Websphere especifica el puerto y $WSSN define el hostname que se utilizará cuando se llame a response.sendRedirect() en Websphere. Además, el puerto proporcionado en el encabezado $WSSP también se utiliza para mapear el host virtual en Websphere.

Conéctese a la Consola de administración de Websphere y haga lo siguiente:

  • vaya a Entorno > Hosts virtuales
  • seleccione la configuración del host virtual que se utiliza para CQ
  • haga clic en Alias de host
  • añadir puerto 80
  • reinicie Websphere si es necesario



NOTA: Puede ser necesario añadir más encabezados específicos de Websphere, dependiendo de la configuración. Consulte este documento que describe los encabezados específicos de Websphere y su significado.

Descargar

Logotipo de Adobe

Inicia sesión en tu cuenta