有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何通过Uploadify传递会话cookie来播放?

我正在尝试使用Uploadify,一个Ajax文件上传程序,与Play Framework一起使用

Uploadify使用Flash对象与服务器对话。。。因此,默认情况下,它不会使用Play Cookie。我想正确地验证我的用户,所以我需要上传以通过自身发送一些cookie

有没有人能举一个两者共同工作的例子,或者说,如果没有,还有一些建议


共 (2) 个答案

  1. # 1 楼答案

    uploadify有一个名为scriptData的选项,您可以使用该选项发送authentityToken:

    #{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>
    
  2. # 2 楼答案

    如果你使用httpOnly配置(and you should!),然后,就不可能通过Play的原生身份验证cookie上传

    我所做的是:

    1。不使用@With(Secure.class)保护图像控制器,而是使用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

    请注意,使用这种方法仍然会受到重播攻击,但我认为这是游戏中的一个普遍问题(我可能会误解这一点)。你可以在签名上加上有效期来限制损坏