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实现()这里已经开发了所有内容。我的问题是
您可以使用动作合成,请参见: 简而言之,这将解决您的问题: (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)