ActionBuilder In Play 2.5 Framework 如何授权保护静态文件

How to protect static files with authorization ActionBuilder In Play 2.5 Framework

我有一个在我的 Play 2.5 应用程序中的大多数 REST 端点上使用的 ActionBuilder:

  def IfAuthorized(auths: Authorizations*): ActionBuilder[AuthRequestWithAuthorization] = {
    new MyAuthActionBuilder(auths.toList)
  }

我可以用作 :

  def status = IfAuthorized(Editor).async { implicit authReq =>
      //eventually return Result
  }

现在我想在同一个 ActionBuilder 中包装静态文件请求。目前我使用这个 oneliner,它使我能够服务 html、js、css 等,所有 returned/cached 都不受我的干扰:

GET         /ui/*file                  controllers.Assets.versioned(path="/public", file: Asset)

我不确定如何插入 ActionBuilder。 return 初始 html 页面的糟糕尝试包括:

  def index()= IfAuthorized(Editor) {  authReq =>
    val contentStream = this.getClass.getResourceAsStream("/public/index.html")
    Ok.chunked(Enumerator.fromStream(contentStream)).as(HTML)
  }

Action 只能 return 一个特定的 html 文件,而我希望所有静态资产 return 来自 1 条路线,受我的自定义保护 ActionBuilder

您需要实现自己的资产控制器:路线

GET   /auth/*file   controllers.AuthAssets.at(path="/public", file: String)

将指向以下端点:

class AuthAssets extends Controller {
    def at(path: String, file: String) = IfAuthorized(Editor) {  authReq =>
        val contentStream = this.getClass.getResourceAsStream(path + file)
        Ok.chunked(Enumerator.fromStream(contentStream))
    }
}