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