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))
}
}
我有一个在我的 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))
}
}