如何在Play 2.1中过滤访问代码请求

时间:2013-02-28 14:19:10

标签: scala playframework action-filter playframework-2.1

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

我知道Play有两种机制来执行此操作(例如在Global.onRouteRequest()上注册),所以除非它包含涵盖此问题的代码示例,否则不要只向我发送文档的链接。我尝试使用API​​,但有点卡住了。

2 个答案:

答案 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")
  }
}