1

複数のエンドポイントがあります。finagle フィルターを使用してエンドポイントに共通のフィルターを適用できますが、特定のエンドポイントにフィルターを適用したいと考えています。どうすればこれを達成できますか?

4

2 に答える 2

0

これが私がそれを回避した方法です。おそらく理想的ではありませんが、機能します。

class AuthenticatedEndpoint[A](e: Endpoint[A])(implicit auth: Request => Boolean) extends Endpoint[A] { self =>

  final def apply(mapper: Mapper[A]): Endpoint[mapper.Out] = mapper(self)

  final def apply(input: Input): Endpoint.Result[A] =
    if (auth(input.request)) {
      e(input)
    } else {
      EndpointResult.Matched[Nothing](input, Rerunnable( Unauthorized(new Exception(s"Authentication Failed."))) )
    }
}

object AuthenticatedEndpoint {

  def validSession[A](e: Endpoint[A]): Endpoint[A] = new AuthenticatedEndpoint(e)

}
于 2018-10-30T13:50:35.807 に答える