3

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

我知道 Play 有执行此操作的一对二机制(例如 register on Global.onRouteRequest()),因此不要只向我发送文档链接,除非它包含涵盖此问题的代码示例。我尝试使用 API,但有点卡住了。

4

2 回答 2

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

于 2013-02-28T18:35:16.843 回答
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")
  }
}
于 2013-04-22T01:00:25.803 回答