Problema de SendRedirect com o Dispatcher e o Websphere

Problema, Pergunta

Seguinte configuração: IHS Webserver com o módulo Dispatcher configurado que, por sua vez, aponta para um farm de renderização do servidor de aplicativos do Websphere no qual uma instância do CQ está em execução. Uma classe ou script jsp em CQ chama o método response.sendRedirect() que resulta em um redirecionamento errado: o nome do servidor interno e a porta do servidor de aplicativos Websphere, que não são acessíveis de fora, são expostos no cabeçalho de resposta Location que é usado para fazer o redirecionamento real.

A causa raiz desse problema é o próprio Websphere já que a implementação da IBM do método HttpServletResponse#sendRedirect() é diretamente influenciado por cabeçalhos de solicitação personalizados, por padrão gerados pelo plug-in IHS do Websphere. Isso é considerado como um problema de aprisionamento tecnológico da IBM.

Resolução, Resposta

Usando mod_headers no servidor da Web IHS, é possível passar cabeçalhos específicos do Websphere para o servidor de aplicativos, incluindo esses cabeçalhos com a diretiva RequestHeader. Além disso, esses cabeçalhos personalizados precisam ser explicitamente permitidos na configuração do Dispatcher, caso contrário, esses cabeçalhos personalizados serão ignorados.

Exemplo:

  • domínio público: http://www.mydomain.com

Configuração IHS

Edite o arquivo de configuração httpd.confdo servidor da Web IHS e faça o seguinte:

  • certifique-se de que o módulo mod_headers está presente e carregado
  • adicione cabeçalhos específicos do WAS usando a diretiva RequestHeader

Exemplo (trecho 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>

Configuração do Dispatcher

No nível Dispatcher, é necessário incluir a lista de cabeçalhos de solicitação configurados acima na lista de cabeçalhos de cliente que o Dispatcher encaminhará ao farm de renderização definido, servidor de aplicativo Websphere nesse caso.

Por favor, faça o seguinte:

  • edite o arquivo de configuração dispatcher.any
  • localize a seção /clientheaders e adicione cabeçalhos adicionais para serem incluídos
  • reinicie o IHS

Exemplo (trecho de dispatcher.any):

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

Configuração do Websphere

O cabeçalho $ WSSP do Websphere especifica a porta e o $ WSSN define o nome do host a ser usado quando response.sendRedirect() é chamado no Websphere. Além disso, a porta fornecida no cabeçalho $WSSP é também usada para mapear o host virtual no Websphere.

Conecte-se ao Console de Administração do Websphere e faça o seguinte:

  • navegue para Ambiente > Hosts Virtuais
  • selecione a configuração do host virtual que é usada para CQ
  • clique em Host Aliases
  • adicione porta 80
  • reinicie o Websphere, se necessário



OBSERVAÇÃO: pode ser necessário adicionar mais cabeçalhos específicos do Websphere, dependendo da configuração. Por favor, consulte este documento descrevendo os cabeçalhos específicos do Websphere e seus significados.

Download

Logotipo da Adobe

Fazer logon em sua conta