私はプレイ2.5.0を使用します。カスタムフィルタでHttp.Context.current()を取得できません。私が理解しているように、これはフィルタが新しいスレッドで動作するためです。彼のリクエストを処理する前に、ユーザーがセッション中であるかどうかを確認するために、Http.Contextが必要です。 EssentialFilterを使用すると、ユーザースレッドからExecutorを操作できます。私はエグゼクティブから文脈を得ることができますか? Http.Context.current()。session()が必要です。またはサーバー上のすべてのセッションのマップ。私はSESSION_KEYとmapのデータを比較できます。Http.Context in playframework filters
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);
});
}
他にもアイデアはありますか?ありがとう。
あなたの答えをありがとう。あなたが正しいです。この作業のために、アクション作曲を使用することができます。この場合、ユーザーctxを取得できます。それはフィルタリングするのと同じように動作します。ルートが始まる前に起きます。私の仕事では、それだけで十分です。しかし、フィルターはどうですか?彼らは私たちに要求と応答で作業する能力を与えます。フィルタにctx(Http.Context)を使用する方法はありますか?ありがとうございました。 –
更新を見てください –
私はそれを参照してください。どうもありがとうございました!!!試してみます。 –