我想为请求添加一个(每个方法/全局)过滤器,它只是拒绝(404/403页)任何没有特定URL参数的请求。
我知道Play有两种机制来执行此操作(例如在Global.onRouteRequest()
上注册),所以除非它包含涵盖此问题的代码示例,否则不要只向我发送文档的链接。我尝试使用API,但有点卡住了。
答案 0 :(得分:4)
这是你的意思吗?
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
答案 1 :(得分:0)
如果您只是尝试制作一些可重用的代码来过滤特定操作的请求,那么我想尝试创建一个像这样的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")
}
}