我想为请求添加一个(每个方法/全局)过滤器,它只是拒绝(404/403 页面)任何没有特定 URL 参数的请求。
我知道 Play 有执行此操作的一对二机制(例如 register on Global.onRouteRequest()
),因此不要只向我发送文档链接,除非它包含涵盖此问题的代码示例。我尝试使用 API,但有点卡住了。
我想为请求添加一个(每个方法/全局)过滤器,它只是拒绝(404/403 页面)任何没有特定 URL 参数的请求。
我知道 Play 有执行此操作的一对二机制(例如 register on 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")
}
}