0

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

我正在使用 Flex 3.2 SDK 并尝试通过 SWFLoader 使用子应用程序功能。我一直在参考开发和加载子应用程序文档以了解如何执行此操作。

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

这是摩擦:

对于生产环境,我们的 Web 服务器使用 Spring Security 来转移对登录网页的任何未经授权的访问(这也是正常开发/QA 构建部署的情况)。如果成功登录,则登录的响应会设置一个 cookie。此 cookie 标头应出现在所有后续的寻求从站点检索内容的 HTTP 交互中。

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

如何使用 SWFLoader 从受 Spring Security 保护的网站检索文件(这是一种广泛使用的保护对基于 Java 的网站的访问的方法——在与 Spring Source 融合之前,它曾经被称为 Acegi 安全性)。

在浏览器 Flash Player 沙箱中运行我们的基于 Flex 的代码是一件轻而易举的事——Spring Security 的东西由浏览器管理。但是,尝试在 AIR 中将我们基于 Flex 的应用程序作为子应用程序运行在远程沙箱的安全范围内,这被证明是一种地狱般的体验。

AIR HTML 控件虽然与 Spring Security 配合得很好,但它是不行的,因为如果在 AIR 本机窗口上将透明度设置为 true,则加载的任何 .swf 或 .pdf 内容都不会显示。我们特定的 UI 设计绝对要求将透明度设置为 true,因为我们正在制作浮动在用户桌面上的 MDI 子窗口。

4

1 回答 1

0

我解决了这个问题,方法是将 AIR HTML 控件的使用与 SwfLoader 结合使用,然后加载所需的远程 .swf 文件。

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

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

处理完点击事件后,AIR Flex 代码就知道继续实例化 SwfLoader 实例是安全的。当来自 SwfLoader 对象的 complete 事件触发时,SwfLoader 的对象引用将放置在 AIR 应用程序显示列表中。

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

因此,AIR 应用程序正在管理由 HTML 控件建立的 cookie 标头。当 SwfLoader 控件用于加载远程 .swf 文件时,会在其 HTTP 请求中发出该 cookie 标头。Spring Security 过滤器看到这一点并发现请求来自经过身份验证的用户会话。

于 2009-04-08T04:24:22.583 回答