Möchte man einen Lasttest gegen ein Liferay Portal durchführen, kommt man schnell an die Stelle, dass man eine Anmeldung am Portal durchführen muss. Aufgrund des CSRF-Schutzes von Liferay reicht es aber nicht, einfach einen POST Request mit den Zugangsdaten gegen das Login Portlet abzusetzen. Man bekommt dann folgende Exeption:
com.liferay.portal.security.auth.PrincipalException: Invalid authentication token
Nun hat man verschiedene Möglichkeiten, um dem Problem zu begegnen:
- Man setzt in der Datei portal-ext.properties die Property auth.token.check.enabled auf false und startet Liferay neu. Danach wird die Token-Prüfung übersprungen.
- Man implementiert einen Autologin Hook, der dafür sorgt, dass man automatisch angemeldet wird.
- Man extrahiert den Sicherkeits-Token aus der Response des Login Portlets und integriert den Token in den Login Request.
Die dritte Möglichkeit bietet sich an, wenn man keine Anpassungen am Portal vornehmen möchte und soll im Folgenden am Beispiel von JMeter näher erläutert werden.
Vorraussetzungen für die Liferay Sessions ist ein Cookie Manager. Zusätzlich benötigt man für den Loginvorgang einen Runonce Controller. Dem Runonce Controller fügt man zwei HTTP Requests und einen Regular Expression Extractor hinzu. Im ersten Request ruft man das Login Portlet auf. Folgender Pfad kann dafür verwendet werden:
/web/guest/?p_p_id=58&p_p_state=maximized&_58_struts_action=%2Flogin%2Flogin
Der Extractor wird wie im Screenshot ersichtlich konfiguriert:
Nun kann man den Parameter "authtoken" für den zweiten Login Request verwenden. Der Pfad für den Request lautet:
/web/guest/?p_auth=${authtoken}&p_p_id=58&p_p_lifecycle=1&p_p_state=maximized&_58_struts_action=%2Flogin%2Flogin
Die POST Parameter lassen sich dem nächsten Sceenshot entnehmen. Die Namen der Parameter lauten:
- _58_login
- _58_password
- _58_rememberMe
Die Parameter "_58_login" und "_58_password" sind mit den vorhandenen Zugangsdaten zu füllen.
Das Ergebnis des Loginvorgangs lässt sich im Results Tree prüfen. Ein erfolgreiches Login zeigt sich an dem Vorhandensein der Dockbar in der Response:
Nach dem erfolgreichen Login kann man nun wie gewohnt die Portalseiten im angemeldeten Zustand auf Performance testen.