Scala 如何筛选Play 2.1中访问代码的请求
我想为请求添加一个(每个方法/全局)过滤器,它只会拒绝(404/403页)任何没有特定URL参数的请求 我知道Play有一个两个机制来实现这一点(例如,在Scala 如何筛选Play 2.1中访问代码的请求,scala,playframework,action-filter,playframework-2.1,Scala,Playframework,Action Filter,Playframework 2.1,我想为请求添加一个(每个方法/全局)过滤器,它只会拒绝(404/403页)任何没有特定URL参数的请求 我知道Play有一个两个机制来实现这一点(例如,在Global.onRouteRequest())上注册),所以不要只向我发送文档链接,除非它包含一个涵盖此问题的代码示例。我试着玩API,但有点卡住了。这就是你的意思吗 object Global extends WithFilters(AccessCheck) object AccessCheck extends Filter with R
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)
}
如果您只是想编写一些可重用的代码来过滤特定操作的请求,那么您可以尝试创建一个类似这样的基本操作。这就是所谓的动作合成。这就是您描述的案例中的情况。文档中有更多信息: 请注意,您也可以在Play 2.0.X中执行此操作,但EssentialAction不存在,而是使用了一个操作,并且只涉及了一点语法
def RequireMyCheck(action: => EssentialAction): EssentialAction = {
EssentialAction { request =>
request
.getQueryString("myCheck")
.map( myCheck => action()(request))
.getOrElse(Forbidden)
}
}
您可以这样使用它:
def index = RequireMyCheck {
Action { request =>
Ok("Hello")
}
}
@朱利安拉丰-对不起,斯卡拉。