【问题标题】:Serving static files with authentication in the playframework在 playframework 中提供具有身份验证的静态文件
【发布时间】:2011-10-26 17:48:52
【问题描述】:

是否有一种简单/内置的方法让控制器检查连接是否被授权访问静态文件而不是服务器(使用数据库查找),然后在需要时提供访问权限。

有大视频文件,我想a)检查是否允许用户访问文件,b)如果用户被授权我想记录视频已经被观看过。

【问题讨论】:

    标签: playframework


    【解决方案1】:

    有两种方法可以做到这一点。

    第一个也是最优雅的方法是使用 Play Plugin 功能。

    您可以在How to extend the playframework? 找到更多信息 这是javadoc: http://www.playframework.org/documentation/api/1.2.3/play/PlayPlugin.html

    第二个是从路由提供文件

    如果文件是基于路由/控制器的,那么您可以像保护任何其他控制器一样保护它们。如果我错了,请有人纠正我。

    我会做类似的事情(注意此代码尚未经过测试):

    @With(Secure.class)保护

    public static void getImage() {
        File file = new File( "~/image.png" );
        response.contentType = "image/png";
        renderBinary( file );
    }
    

    然后是路线

    GET     /static/image1    Application.getImage
    

    或者你可以让它更优雅。

    GET     /static/image/{fileName}   Application.getImage
    GET     /static/image/{id}         Application.getImageById
    

       public static void getImage(String fileName) {
            File file = new File( "~/" + fileName );
            response.contentType = "image/png";
            renderBinary( file );
        }
    

    或者更进一步。

    public static void getImage( String fileName, String username ) {
        File file = new File( "~/" + fileName );
    
        if ( file.exists() ) {
            User user = User.find( "byName", username ).fetch();
            user.watch = true;
            user.save();
    
            response.contentType = "image/png";
            renderBinary( file );
        }
    }
    

    如果文件不存在,显然你需要在其中进行一些尝试和捕获。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 2021-05-31
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 2017-06-04
      • 2011-10-04
      相关资源
      最近更新 更多