繁体   English   中英

如何通过Uploadify将会话cookie传递给Play?

[英]How to pass the session cookie to Play via Uploadify?

我正在尝试使用Play Framework上的 Ajify文件上传器Uploadify

Uploadify使用Flash对象与服务器通信...因此默认情况下它不会使用Play cookie。 我想要正确验证我的用户,所以我需要让uploadify发送一些自己的cookie。

有没有人有一个合作的两个工作的例子,或者,失败,一些指针?

uploadify有一个名为scriptData的选项,您可以用它来发送您的authenticntityToken:

#{authenticityToken /}

<script>
var token = $('#input[name=authenticityToken]').val();
$('#file_upload').uploadify({
  'uploader'    : '/uploadify/uploadify.swf',
  'script'      : '/uploadify/uploadify.php',
  'cancelImg'   : '/uploadify/cancel.png',
  'folder'      : '/uploads',
  'scriptData'  : {'authenticyToken': token}
});
</script>

好吧,如果您正在使用httpOnly配置( 并且您应该 !),则无法将Play的本机身份验证cookie传递给uploadify。

我做的是:

1.使用@With(Secure.class)不保护Images控制器,而是使用before method

@Before(unless = "uploadPost")
public static void before() throws Throwable {
    Secure.checkAccess();
}

2.传递来自控制器的两个参数,这些参数呈现托管uploadify插件的页面:userId和signedUserId

String userIdSignature = Crypto.sign(Long.toString(user.id));
render(..., user.id, userIdSignature);

3.将这两个参数传递给uploadify,并传递给uploadPost方法

public static void uploadPost(Upload upload, long userId, String userIdSignature) {
    assertEquals(userIdSignature, Crypto.sign(Long.toString(userId)),
        "Failed to authenticate user ID " + userId);

如果由于某种原因您不希望客户端知道其用户ID,则签名的替代方法是加密用户ID。

请注意,您仍然会使用此方法接受重放攻击,但我认为这是Play的一般问题(我可能会对此有所误解)。 您可以在签名中添加到期日期以限制损坏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM