Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Playframework 2.0 Play框架-资产的身份验证_Playframework 2.0 - Fatal编程技术网

Playframework 2.0 Play框架-资产的身份验证

Playframework 2.0 Play框架-资产的身份验证,playframework-2.0,Playframework 2.0,我正在开发一个应用程序,我想限制对资产的访问。我已经创建了其他文件夹 secret/ 它保存着数据。然后我创建了路线 /media/secret/*file controllers.Media.file(file) 和控制器介质 public class Media extends Controller { @Authenticate public Result file(String file) { String path = /home/foo/secretpath/

我正在开发一个应用程序,我想限制对资产的访问。我已经创建了其他文件夹

secret/
它保存着数据。然后我创建了路线

/media/secret/*file     controllers.Media.file(file)
和控制器介质

public class Media extends Controller
{
@Authenticate
public Result file(String file)
{
    String path = /home/foo/secretpath/
    File f = new File(path, file);
    if(!f.exists())
    {
        return notFound();
    }

    return ok(f, true);
}
这是可行的,唯一的问题是并没有Etag或缓存控制。检查Assets.scala实现()这里已经开发了所有内容。我的问题是

  • 我应该编写额外的代码来实现Etag和缓存控制吗?如果是,如何进行?我看不懂scala
  • 如果有一种方法可以使用Assets类,那么如何使其工作?返回操作不会触发@Authenticate,因此我可以验证它是否正确

  • 您可以使用动作合成,请参见:

    简而言之,这将解决您的问题:

    (1) 新行动

    def OnlyAuthenticated[A](action: Action[A]) = Action.async(action.parser) { request =>
        request.session.get("username") match {
            case Some(username) =>
                User.findByUsername(username) match {
                    case Some(user) =>
                        action(request)
                    case _ =>
                        Future.successful(Forbidden(views.html.defaultpages.unauthorized.render()))
                }
            case _ =>
                Future.successful(Redirect(routes.Application.login(request.path)))
        }
    }
    
    (2) 控制器动作

    def privateAsset(file:String) = OnlyAuthenticated{
        Assets.at(s"/private", file)
    }
    
    (3) 路线

    GET     /private/*file      controllers.Application.privateAsset(file)