Problema di SendRedirect con Dispatcher e Websphere

Problema, Domanda

Impostazione successiva: IHS Webserver con modulo Dispatcher configurato che a sua volta punta a una farm di rendering dell'app-server Websphere dove è in esecuzione un'istanza CQ. Una classe o uno script jsp in CQ chiama il metodo response.sendRedirect() che si traduce in un reindirizzo sbagliato: il nome del server interno e la porta dell'app-server Websphere che non è raggiungibile dall'esterno è esposto nell'intestazione di risposta Posizione che è usata per eseguire il reindirizzo.

La causa principale di questo problema è Websphere stesso in quanto l'implementazione IBM del metodo HttpServletResponse#sendRedirect() è direttamente influenzata dalle intestazioni di richiesta personalizzate, generate per impostazione predefinita dal plugin IHS di Websphere. Questo è considerato un problema vendor lock-in di IBM.

Risoluzione, risposta

Utilizzando mod_headers nel webserver IHS è possibile passare intestazioni specifiche di Websphere all'app-server aggiungendo tali intestazioni con la direttiva RequestHeader. Inoltre, queste intestazioni personalizzate devono essere esplicitamente consentite nella configurazione del Dispatcher, altrimenti verranno ignorate.

Esempio:

  • dominio pubblico: http://www.mydomain.com

Configurazione IHS

Modifica il file di configurazione httpd.conf del server Web IHS e procedi come segue:

  • assicurati che il modulo mod_headers sia presente e caricato
  • aggiungi intestazioni specifiche WAS utilizzando la direttiva RequestHeader

Esempio (estratto da 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>

Configurazione del Dispatcher

A livello di Dispatcher, è necessario aggiungere l'elenco delle intestazioni di richiesta configurate sopra all'elenco delle intestazioni client che il Dispatcher inoltrerà alla render farm definita, in questo caso l'app-server Websphere.

Esegui quanto segue:

  • modifica il file di configurazione dispatcher.any
  • individua la sezione /clientheaders e aggiungi ulteriori intestazioni da includere
  • riavvia IHS

Esempio (estratto da dispatcher.any):

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

Configurazione di Websphere

L'intestazione Websphere $WSSP specifica la porta e $WSSN definisce l'hostname da usare quando response.sendRedirect() è chiamato in Websphere. Inoltre, la porta fornita nell'intestazione $WSSP viene utilizzata anche per mappare l'host virtuale in Websphere.

Collegati alla console di amministrazione di Websphere e procedi come segue:

  • vai a Ambiente > Host virtuali
  • seleziona la configurazione dell'host virtuale utilizzata per il CQ
  • fai clic su Alias degli host
  • aggiungi porta 80
  • riavvia Websphere se necessario



NOTA: potrebbe essere necessario aggiungere intestazioni più specifiche di Websphere, a seconda della configurazione. Fai riferimento a questo documento che descrive le intestazioni specifiche di Websphere e il loro significato.

Scarica

Logo Adobe

Accedi al tuo account