Anforderung abfangen und Autorisierung in playframework prüfen
Ich benutzeplay framework 2.4.2
mit Java und ich möchten überprüfen, ob ein Benutzer angemeldet ist, indem ich alle Anforderungen abfange und überprüfe, ob ein Sitzungswert festgelegt ist. Also habe ich das @ erweite DefaultHttpRequestHandler und überschreiben dascreateAction
Methode zum Abfangen aller Anforderungen. Ich habe jedoch keine gute Möglichkeit gefunden, die Sitzung zu validieren.
Wenn ich versuche, den Sitzungswert abzurufen, wird eine Laufzeitausnahme angezeigt:There is no HTTP Context available from here
Below ist die Klasse, mit der ich arbeite:
public class RequestHandler extends DefaultHttpRequestHandler {
@Override
public Action createAction(Http.Request request, Method method) {
session("loggedIn"); // Throws runtime Exception: no HTTP Context
}
}
Option 2 - UglyDa es sich bei der Sitzung technisch gesehen um ein Cookie handelt, kann ich den Wert mit folgendem Code aus der Kopfzeile abrufen:
for(String cookie : request.headers().get("Cookie")){
System.out.println("cookie: "+cookie);
}
Aber dann muss ich die Cookie-Zeichenfolge analysieren, die wie die folgende Zeile aussieht, um den Wert für "eingeloggt" zu erhalten. Zu dreckig für meinen Geschmack.
_ga=GA1.1.1508004144.1421266376; ki_r=; ki_t=1438789543788%378129908%3B1438789543788%3B1%3B1; PLAY_SESSION=0570411c3eb55ad230681539ddcfaa4220583fd-loggedIn=1
Option 3 - Zu leicht die Anmerkung zu vergessen Ich stelle fest, dass einige Websites einen anderen Ansatz dokumentieren und stattdessen ein @ erstelle
action Zusammensetzung und fügen Sie jeder Controller-Klasse oder -Methode die entsprechende Anmerkung hinzu.
Das Problem bei diesem Ansatz besteht darin, dass der Entwickler daran denken muss, die Anmerkung hinzuzufügen. Ich würde es vorziehen, dies umzukehren, um standardmäßig jede Route zu blockieren und dann eine Anmerkung zu den Routen hinzuzufügen, für die keine Validierung erforderlich ist.
Ein paar Sites, die die Aktionszusammensetzung dokumentieren:
http: //alexgaribay.com/2014/06/16/authentication-in-play-framework-using-javahttps: //www.playframework.com/documentation/2.2.1/JavaGuideFragibt es eine Möglichkeit, global zu überprüfen, ob ein Benutzer Zugriff auf eine Seite haben soll, und wie erhalte ich die Sitzungsvariabl
* Bitte beachten Sie, dass ich kein Plugin eines Drittanbieters zur Authentifizierung verwenden möchte.