Ich benutze play 2.5.0. Ich kann Http.Context.current() im benutzerdefinierten Filter nicht abrufen. Wie ich es verstehe, liegt das daran, dass Filter in neuen Threads arbeiten. Ich brauche Http.Context, um zu überprüfen, ob der Benutzer in der Sitzung ist, bevor er mit seiner Anfrage arbeitet. EssentialFilter ermöglicht es uns, mit dem Executor aus dem Benutzer-Thread zu arbeiten. Vielleicht kann ich Kontext von Executor bekommen? Ich brauche Http.Context.current(). Session(). Oder eine Karte aller Sitzungen auf dem Server. Dann kann ich SESSION_KEY mit Daten in der Karte vergleichen.Http.Context in playframework Filter
private final Executor executor;
@Inject
public SessionFilter(Executor executor) {
super();
this.executor = executor;
}
@Override
public EssentialAction apply(EssentialAction next) {
Http.Context ctx = getHttpContext(executor);
//Need to get ctx from executor
checkIfUserInSession(ctx);
return EssentialAction.of(request -> {
Accumulator<ByteString, Result> accumulator = next.apply(request);
return accumulator.map(result -> {
return result;
}, executor);
});
}
Hat jemand irgendwelche Ideen? Vielen Dank.
aussieht Vielen Dank für Ihre Antwort. Du hast recht. Für diese Aufgabe können wir Aktionszusammenstellungen verwenden. In diesem Fall können wir Benutzer ctx erhalten. Es funktioniert dasselbe zum Filtern. Es steht vor dem Start auf. Bei meiner Aufgabe ist es völlig ausreichend. Aber was ist mit Filtern? Sie geben uns die Fähigkeit, mit Anfrage und Antwort zu arbeiten. Gibt es eine Möglichkeit, ctx (Http.Context) in Filtern zu verwenden? Vielen Dank. –
Schauen Sie sich das Update –
Ich sehe es. Vielen Dank!!! Ich werde es versuchen. –