English 中文(简体)
需要在使用SWFLoader检索远程Flex .swf文件的AIR设置cookie头。
原标题:
  • 时间:2009-03-24 02:12:53
  •  标签:

正在编写一个AIR 1.5应用程序,我想从Web服务器上远程加载一个Flex .swf文件。

我正在使用Flex 3.2 SDK,尝试通过SWFLoader使用子应用程序功能。我一直在参考“开发和加载子应用程序”文档来进行操作。

我确实可以成功地从远程网页服务器加载 Flex .swf 文件,并将其加载到远程沙盒中。这个 .swf 文件的运行形式甚至尊重我在 AIR 本地窗口上设置的透明度设置。

这是个问题:

对于生产环境,我们的Web服务器使用Spring Security来防止未经授权的访问登录网页(正常开发/质量保证构建部署也是如此)。如果成功登录,则登录的响应将设置一个cookie。该cookie头应出现在所有随后的HTTP交互中,以获取站点内容。

我不知道如何在使用SWFLoader检索Flex .swf文件时设置Cookie标题。

我该如何使用SWFLoader从被Spring Security保护的网站检索文件(Spring Security是保护基于Java的网站访问的广泛使用的方式 - 在与Spring Source融合之前,它曾被称为Acegi安全性)?

当我们在浏览器Flash Player沙箱中运行基于Flex的代码时,非常容易 - 浏览器能很好地管理Spring Security。然而,在远程沙箱的安全范围内作为子应用程序运行基于Flex的应用程序,却是一种糟糕的体验。

AIR HTML控件虽然与Spring Security能很好地配合,但不能用,因为如果在AIR原生窗口上将透明度设置为true,则不会显示任何.swf或.pdf内容。我们特定的UI设计绝对要求将透明度设置为true,因为我们正在进行悬浮在用户桌面上的MDI子窗口。

最佳回答

我通过使用AIR HTML控件和SwfLoader相结合的方式来解决这个问题,然后加载所需的远程.swf文件。

我在HTML网页上编写了一个JavaScript函数,我的AIR应用程序将其加载到HTML实例中(当网页完成事件被触发时,从AIR Flex代码调用JavaScript函数是安全的 - 当然,Flex代码可以处理HTML完成事件)。

这个JavaScript函数使用XmlHttpRequest()登录到使用Spring Security进行授权的网站。成功登录后,Set-Cookie头将被处理。当XmlHttpRequest()的响应完成时,将在放置在网页上的虚拟DIV对象上分派合成点击事件。 AIR Flex代码能够注册并处理此合成点击事件。

在处理单击事件后,AIR Flex代码就知道可以安全地继续实例化SwfLoader实例了。当SwfLoader对象的完成事件触发时,SwfLoader的对象引用就会被放置在AIR应用程序的显示列表中。

用户随后看到远程加载的swf文件开始执行并显示其自己的界面。它正在运行于子应用程序远程沙盒上下文中。SwfLoader控件通过Flex SDK 3.2支持子应用程序功能。

因此,AIR应用程序正在管理由HTML控件建立的cookie标头。使用SwfLoader控件加载远程.swf文件时,该cookie标头会在HTTP请求中发出。Spring安全过滤器会看到这一点,并认为该请求来自已认证的用户会话。

问题回答

暂无回答




相关问题
热门标签