2016-06-28 23 views
-1

Ich versuche eine GWT-Anwendung zu erstellen, die Shibboleth-basierte Autorisierung implementiert. Da es schließlich im "Produktionsmodus" geliefert werden sollte, entschied ich mich für die Anwendung mit Tomcat7, aber der Client stellt eine Verbindung zu Apache2 her, die die Anfrage dann über AJP an Tomcat weiterleitet (unter Verwendung von mod_proxy_ajp).Zugriff auf AJP-Anforderungsdaten von einem GWT-Servlet

Die grundlegende Aufgabe, die der Anwendung dient, funktioniert. Allerdings muss ich irgendwie Zugriff auf die von Shibboleth definierten Umgebungsvariablen haben. Laut the Shibboleth documentation werden Umgebungsvariablen an Tomcat weitergeleitet, wenn ihnen das Präfix AJP_ vorangestellt wird (das Präfix wird dann gelöscht). Deshalb habe ich Shibboleth so konfiguriert, dass es allen Umgebungsvariablen, die es definiert, dieses Präfix hinzufügt funktioniert, wie ich mit einem PHP-Skript bestätigt habe, das einfach alle Umgebungsvariablen druckt).

Das Problem ist, dass die Umgebungsvariablen als Umgebungsvariablen nicht mehr verfügbar sind, wenn sie Tomcat erreichen, sondern sollen vielmehr bedient werden - wie die mod_proxy_ajp documentation es Sätze - wie AJP Anfrage Attribute.

Offensichtlich sind diese Arten von Attributen soll so etwas wie

getThreadLocalRequest().getSession().getAttribute("uid") 

aus dem Servlet zugegriffen werden. Obwohl mein PHP-Skript eine Umgebungsvariable mit dem Namen AJP_uid auflistet, gibt der obige Aufruf jedoch null zurück, während von dem, was ich verstehe, es denselben Wert zurückgeben sollte, den die Umgebungsvariable AJP_uid hat.

Um sicher zu sein, habe ich auch den Anruf oben mit AJP_uid anstelle von uid für den Fall, dass das Präfix aus irgendeinem Grund nicht gelöscht wurde, aber ohne Glück versucht.

Was mache ich falsch?

+1

Haben Sie versucht, getAttribute direkt auf die Anforderung und nicht auf die Sitzung aufzurufen? –

+0

@ThomasBroyer hatte ich nicht, jetzt habe ich und es hat einwandfrei funktioniert. Vielen Dank! Nun, wie kann ich diese Frage als beantwortet markieren, ohne Sie Ihres Kredits zu berauben? – koala

+0

Oh, es ist mir egal, akzeptiere einfach deine eigene Antwort. –

Antwort

0

Wie @ThomasBroyer erwähnte, kann ich auch getAttribute auf das HttpServletRequest direkt von getThreadLocalRequest() zurückgegebene Objekt aufrufe, die in die Tat den Trick für mich getan haben:

getThreadLocalRequest().getAttribute("uid") 

gibt den entsprechenden Wert ich erwartet habe. Danke!