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.

Option 1 - Fail

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 - Ugly

Da 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/JavaGuideFrag

ibt 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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage