Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何筛选Play 2.1中访问代码的请求_Scala_Playframework_Action Filter_Playframework 2.1 - Fatal编程技术网

Scala 如何筛选Play 2.1中访问代码的请求

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

我想为请求添加一个(每个方法/全局)过滤器,它只会拒绝(404/403页)任何没有特定URL参数的请求

我知道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)
}

如果您只是想编写一些可重用的代码来过滤特定操作的请求,那么您可以尝试创建一个类似这样的基本操作。这就是所谓的动作合成。这就是您描述的案例中的情况。文档中有更多信息:

请注意,您也可以在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")
  }
}

@朱利安拉丰-对不起,斯卡拉。