これを見て、フィルタシステムが現在動作している方法は、WebSocket要求に適用されないようになります。
問題はフィルターがWebSocketの機能だから本当に動作しないフィルターシステムを通じてのWebSocket結果を渡す
f: RequestHeader => Future[Either[Result, Flow[In, Out, _]]]
を取るよう
nextFilter: RequestHeader => Future[Result]
を取って適用する方法で動作していることです。
私の場合は、主にロギングフィルタに興味がありました。だから、次のように私はacceptOrResult
のカスタムバージョンを作成し、回避策として:
def acceptOrResult[TIn, TOut](f: RequestHeader => Future[Either[Result, Flow[TIn, TOut, _]]])(implicit transformer: MessageFlowTransformer[TIn, TOut], materializer: Materializer, ec: ExecutionContext): WebSocket = {
WebSocket { request =>
f(request).map { fResult =>
PostRequestLoggingFilter.apply(request,fResult.left.getOrElse(Ok))
fResult.right.map(transformer.transform)
}
}
}
私はそれが上記が機能できるようのメソッドを適用するオブジェクトの仲間だへPostRequestLoggingFilter
のうちのロジックを破るために必要な。
WebSocket
リクエストがLeft
の場合は、Result
です。もしそれがRight
なら、私はただOk
の結果を渡すだけです。のWebSocketリクエストの後にを実行する気にならない限り、これは他のフィルタにも適用できます。
出典
2016-07-23 19:05:43
JBY