Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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
Java 如何通过Uploadify传递会话cookie以播放?_Java_Playframework_Uploadify - Fatal编程技术网

Java 如何通过Uploadify传递会话cookie以播放?

Java 如何通过Uploadify传递会话cookie以播放?,java,playframework,uploadify,Java,Playframework,Uploadify,我正在尝试使用,一个Ajax文件上传程序 Uploadify使用Flash对象与服务器对话。。。因此,默认情况下,它不会使用Play cookies。我想正确地验证我的用户,所以我需要上传来发送一些cookies 是否有人有两个一起工作的示例,或者,如果没有,还有一些指针?uploadify有一个选项,您可以使用该选项发送authentityToken: #{authenticityToken /} <script> var token = $('#input[name=authe

我正在尝试使用,一个Ajax文件上传程序

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


是否有人有两个一起工作的示例,或者,如果没有,还有一些指针?

uploadify有一个选项,您可以使用该选项发送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>
{authenticityToken/}
var token=$('#input[name=authenticityToken]')。val();
$('#文件上传')。上传({
“uploader”:“/uploadify/uploadify.swf”,
'script':'/uploadify/uploadify.php',
“cancelImg”:“/uploadify/cancel.png”,
'文件夹':'/uploads',
'scriptData':{'authenticyToken':标记}
});

如果您使用的是
httpOnly
配置(!),那么就不可能将Play的本机身份验证cookie传递给uploadify

我所做的是:

1。使用(secure.class)不使用
@保护图像控制器,而是在方法之前使用

@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);
public static void uploadPost(Upload upload, long userId, String userIdSignature) {
    assertEquals(userIdSignature, Crypto.sign(Long.toString(userId)),
        "Failed to authenticate user ID " + userId);
3。将这两个参数传递给uploadify,并传递给
uploadPost
方法

String userIdSignature = Crypto.sign(Long.toString(user.id));
render(..., user.id, userIdSignature);
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


请注意,使用这种方法仍然会受到重播攻击,但我相信这是游戏中的一个普遍问题(我可能会弄错这一点)。您可以在签名上添加过期日期以限制损坏。

我知道scriptData。那么,您是说已经有一个由Play生成的名为
authenticityToken
的隐藏输入字段了吗?我以为是通过cookie来处理会话的。啊,你的意思是使用。还值得一提的是,内置的
{form}
标记会自动添加此项。这还不够,至少对于安全模块是不够的(例如,
Secure.checkAccess()
需要
username
才能在会话中)。也许我也应该复制整个会话cookie?不知道我会怎么做。把你需要的东西放到脚本数据中。uploadify使用flash上传文件。不幸的是,flash无法访问浏览器会话,至少它不会通过网络上的cookie发送。值得注意的是,如果您使用的是
httpOnly
,则可能无法以这种方式使用Play的标准身份验证。我正在考虑删除
httpOnly
。此外,还有一些相关问题,详细说明了在其他web框架中Uploadify的类似问题:以及