play2でフィルター処理っぽく書きたい

ソースも全然できてませんが、play2でActionを実行する前に色々とフィルター処理がかけたらいいなーと思い、色々と試行錯誤してます。

イメージ的には、こんな感じ。(フィルター処理は適当)

def index =
  Filter { req =>
    req.getQueryString("key1") match {
      case Some(_) => continue // continueで次のフィルターに処理が移る。
      case None    => BadRequest // continue以外のResultの場合はそれが返る。
    }
  } >> Filter { req =>
    req.getQueryString("key2") match {
      case Some(value) => continueWith(value) // continueWithで渡した値は次のFilter/Actionに渡る(出来ればタプルで)
      case None        => BadRequest
    }
  } >> Action { (value2) => request =>
    Ok("key2 is %s" format value2)
  }

実現できないかなぁ・・・。