特定の URL パラメーターを持たない要求を単に拒否する (404/403 ページ) フィルターを (メソッドごと/グローバル) 要求に追加したいと思います。
Play にはこれを行うためのワンツー メカニズムがあることを知っています (例: に登録Global.onRouteRequest()
)。この質問をカバーするコード サンプルが含まれていない限り、ドキュメンテーションへのリンクを送らないでください。API をいじってみましたが、ちょっと行き詰まりました。
特定の URL パラメーターを持たない要求を単に拒否する (404/403 ページ) フィルターを (メソッドごと/グローバル) 要求に追加したいと思います。
Play にはこれを行うためのワンツー メカニズムがあることを知っています (例: に登録Global.onRouteRequest()
)。この質問をカバーするコード サンプルが含まれていない限り、ドキュメンテーションへのリンクを送らないでください。API をいじってみましたが、ちょっと行き詰まりました。
これはあなたが意味するものですか?
object Global extends WithFilters(AccessCheck)
object AccessCheck extends Filter with Results {
override def apply(next:RequestHeader => Result)(request:RequestHeader):Result =
request
.getQueryString("myCheck")
.map( myCheck => next(request))
.getOrElse(Forbidden)
}
http://www.playframework.com/documentation/2.1.0/ScalaInterceptors
特定のアクションでリクエストをフィルタリングするための再利用可能なコードを作成しようとしている場合は、このような EssentialAction を作成してみてください。これは、アクション合成として知られています。これは、あなたが説明した場合にどのように見えるかです。ドキュメントに詳細があります: http://www.playframework.com/documentation/2.1.1/ScalaActionsComposition
これは Play 2.0.X でも同様に実行できますが、EssentialAction は存在せず、代わりに Action を使用することに注意してください。また、もう少し構文が必要です。
def RequireMyCheck(action: => EssentialAction): EssentialAction = {
EssentialAction { request =>
request
.getQueryString("myCheck")
.map( myCheck => action()(request))
.getOrElse(Forbidden)
}
}
次のように使用できます。
def index = RequireMyCheck {
Action { request =>
Ok("Hello")
}
}