SendRedirect-Problem mit Dispatcher und Websphere

Problem, Frage

Folgendes Setup: IHS-Webserver mit konfiguriertem Dispatcher-Modul, das wiederum auf eine Websphere-Anwendungsserver-Renderfarm verweist, auf der eine CQ-Instanz ausgeführt wird. Ein Klassen- oder JSP-Skript in CQ ruft die Methode response.sendRedirect() auf, die zu einer falschen Umleitung führt: der interne Servername und Port des Websphere-Anwendungsservers, der von außen nicht erreichbar ist, ist offen in der Speicherort- Antwort-Kopfzeile sichtbar, die für die eigentliche Umleitung verwendet wird.

Die eigentliche Ursache für dieses Problem ist Websphere selbst, da IBMs Implementierung der Methode HttpServletResponse#sendRedirect() direkt von benutzerdefinierten Anforderungs-Kopfzeilen beeinflusst wird, die standardmäßig von Webspheres IHS-Plugin generiert werden. Dies wird als ein IBM Anbieter-Lock-in-Effekt-Problem angesehen.

Auflösung, Antwort

Mit der Nutzung von mod_headers auf dem IHS-Webserver können Websphere-spezifische Kopfzeilen an den App-Server übergeben werden, indem solche Kopfzeilen mit der RequestHeader-Direktive hinzugefügt werden. Darüber hinaus müssen diese benutzerdefinierten Kopfzeilen in der Dispatcher-Konfiguration explizit zugelassen werden, da diese benutzerdefinierten Kopfzeilen andernfalls ignoriert werden.

Beispiel:

  • Öffentliche Domäne: http://www.mydomain.com.

IHS-Konfiguration.

Bearbeiten Sie die Konfigurationsdatei httpd.conf des IHS-Webservers und gehen Sie folgendermaßen vor:

  • Stellen Sie sicher, dass das Modul mod_headers vorhanden und geladen ist
  • Fügen Sie WAS-spezifische Header mit der RequestHeader-Direktive hinzu

Beispiel (Auszug aus 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-Konfiguration

Auf Dispatcher-Ebene muss die Liste der oben konfigurierten Anforderungsheader der Liste der Client-Header hinzugefügt werden, die der Dispatcher in diesem Fall an die definierte Renderfarm Websphere-Anwendungsserver weiterleitet.

Führen Sie die folgenden Schritte aus:

  • Bearbeiten Sie die Konfigurationsdatei dispatcher.any
  • Suchen Sie den Abschnitt /clientheaders und fügen Sie zusätzliche Header hinzu, die eingefügt werden sollen
  • IHS neu starten

Beispiel (Auszug aus dispatcher.any):

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

Websphere-Konfiguration

Der Websphere-Header $WSSP gibt den Port an und $WSSN definiert den Hostnamen, der verwendet werden soll, wenn response.sendRedirect() in Websphere aufgerufen wird. Darüber hinaus wird der im Header $WSSP angegebene Port auch zum Zuordnen des virtuellen Hosts in Websphere verwendet.

Verbinden Sie sich mit der Administrationskonsole von Websphere und gehen Sie folgendermaßen vor:

  • Navigieren Sie zu Environment> Virtuelle Hosts
  • Wählen Sie die Konfiguration des virtuellen Hosts aus, die für CQ verwendet wird
  • Klicken Sie auf Host-Aliase
  • Fügen Sie Port 80 hinzu
  • Starten Sie Websphere bei Bedarf neu



HINWEIS: Je nach Konfiguration müssen möglicherweise mehr Websphere-spezifische Header hinzugefügt werden. Dieses Dokument beschreibt Websphere-spezifische Header und ihre Bedeutung.

Herunterladen

Adobe-Logo

Bei Ihrem Konto anmelden