我是怎么做的:
创建一个像这样PrivateAssets
扩展的AssetsBuilder
:
public class PrivateAssets extends AssetsBuilder {
private final static Logger logger = LoggerFactory.getLogger(PrivateAssets.class);
private static User getLocalUser(final Http.Session session) {
final AuthUser currentAuthUser = PlayAuthenticate.getUser(session);
final User localUser = User.findByAuthUserIdentity(currentAuthUser);
return localUser;
}
private static Http.Session session() { return Http.Context.current().session(); }
private static Http.Request request() { return Http.Context.current().request(); }
private static Http.Response response() { return Http.Context.current().response();}
@SubjectPresent
public static Result at(String path , String file) {
logger.debug(getLocalUser(session()).email + " -> secure asset call : " + path + " | " + file);
return Results.ok(Play.application().getFile(path + File.separator + file), true);
}
}
我也以这种方式修改了我的 Routes 文件:
GET /assets/*file controllers.Assets.at(path="/public/public", file)
GET /secure/assets/*file controllers.PrivateAssets.at(path="/public/private", file)
我的public
文件夹现在有 2 个其他文件夹:
- public
- private
在公共内部,我拥有任何人都可以访问的所有资产结构。
在私有内部,我拥有只有经过身份验证才能访问的所有资产结构。
要获得任何私人资产,我会这样做:
<script src="@routes.PrivateAssets.at("private.min.js")"></script>
还有其他选项,如build.sbt
2.3 迁移指南中所述修改文件以添加另一个资产文件夹,以便为每种资产类型提供两个不同的文件夹。这给了我更多的问题,特别是在测试时。
希望这可以帮助其他需要这种东西的人。