【问题标题】:Play java project with Deadbolt, having private Assets使用 Deadbolt 玩 java 项目,拥有私有资产
【发布时间】:2015-01-16 00:07:58
【问题描述】:

我一直在寻找如何配置资产文件夹的示例,通过@routes.Assets 表示法访问它,但只有在用户通过身份验证时才返回资产。

我已经使用 google 帐户配置了 deadbolt 并完美运行,应用程序运行良好,但不幸的是,当我使用浏览器并记下用于应用程序部分的 Javascript 资产的直接 URL 时,它允许我下载它们没有问题。

所以,总的问题是:有没有办法配置一个只有在用户通过身份验证的情况下才能访问的资产文件夹?

非常感谢

Edit1:我现在的做法是创建了一个名为 PrivateAssets 的控制器,并使用一个名为“at”的方法接收字符串路径和字符串文件参数。该方法使用@SubjectPresent 进行注释,我在那里获取文件并返回它。

【问题讨论】:

    标签: playframework deadbolt deadbolt-2


    【解决方案1】:

    我是怎么做的:

    创建一个扩展 AssetsBuilderPrivateAssets,如下所示:

    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
    

    在 public 内部,我拥有任何人都可以访问的所有资产结构。

    在私有内部,我拥有所有只有经过身份验证才能访问的资产结构。

    要获得任何私人资产,我会这样做:

    <script src="@routes.PrivateAssets.at("private.min.js")"></script>
    

    还有其他选项,如 2.3 迁移指南中所述修改 build.sbt 文件以添加另一个资产文件夹,以便为每种资产类型提供两个不同的文件夹。这给了我更多的问题,特别是在测试时。

    希望这可以帮助其他需要这种东西的人。

    【讨论】:

      猜你喜欢
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2019-05-09
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多