22.2.使用跨域的RSL

22.2.1.问题
我想把RSLs存放在服务器的不同地方以便在不同域的应用程序都能访问到。
22.2.2.解决办法
Compc工具创建RSL时加上compute-digest参数后,RSL摘要信息会在编译时期链接到RSL时存储到应用程序中。然后创建跨域的授权文件引入mxmlc工具的runtime-shared-library-paths选项指定的RSLs位置。
22.2.3.讨论
一个RSL摘要是一个散列码,被用来确认RSL来自于信任方,已被Flash Player载入。当用compute-digest选项设置为true时创建RSL后,这个摘要会被写进SWC存档的catalog.xml文件中。当你编译时链接一个跨越的RSL到应用程序时,这个摘要会被存储到应用程序SWF文件中用来验证所需RSL的合法性。

下面的命令生成一个SWC文件命名为CustomLibrary.swc :
> compc –source-path . –include-classes com.oreilly.flexcookbook.CustomEntryForm -output
CustomLibrary.swc –compute-digest=true

compute-digest选项的默认值为true,当编译库时你不必引入它来创建摘要。当通过MXML编译器的runtime-shared-library-paths选项链接跨域RSLs时才需要摘要。

注意:在上一节中,你看到一个标准的RSL和应用程序放在同一个域中,标准RSLs也可以使用摘要,但是这个摘要不是必须的。

使用上面的命令生成的SWC 文件是一个压缩文件, 包含一个library.swf 文件和一个catalog.xml文件。使用标准的unzip工具解压出这两个文件。这个library是一组编译进SWF将作为RSL被使用的资源。而catalog则使用comput-digest选项生成对library的描述信息。下面显示一个catalog 文件的RSL摘要记录:
+展开
-XML
<digests>
<digest type="SHA-256signed="false"
value="2630d7061c913b4cea8ef65240fb295b2797bf73a0db96ceec5c319e2c00f8a5" />

</digests>

Value值是编译器使用SHA-256算法生成的散列码。当你编译一个连接到RSL的应用程序时,这个摘要的value会被存储到应用程序中,被用来确认来自服务器的RSL的合法性。

除了摘要确认RSL是来自于信任的资源外,跨域授权文件也是库所在服务器所必需的。跨域授权文件是一个XML文件,列举出可访问数据的已授权远程服务器。要让其他应用程序能找到其他域中的RSL,在crossdomain.xml文件中用<allow-access-from>元素列举出域:
+展开
-XML
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.mydomain.com" />
<allow-access-from domain="*.myotherdomain.com" />
</cross-domain-policy>

上面的跨域授权文件允许任何来自http://mydomain.com 和http://myotherdomain.com 的SWF访问服务器数据,包括跨域RSLs。

要允许上面列举出的域中任何SWF访问目标服务器上的数据,你要把跨域授权文件放到服务器的根目录。虽然这是一个可行的方法,但是你可能希望应用程序访问目标服务器上的RSL时有更多控制。通过MXML编译器的runtime-shared-library-path选项,你可以指定跨域授权文件的具体位置。

要编译动态链接到上面生成的CustomLibrary.swf 跨域RSL的应用程序,调用mxmlc工具,使用runtime-shared-library-path参数和目标服务器上的RSL完整URL路径和跨域授权文件:
> mxmlc RSLExample.mxml –runtime-shared-library-path=CustomLibrary.swc,
http://www.mytargetdomain.com/libraries/CustomLibrary.swf,
http://www.mytargetdomain.com/libraries/crossdomain.xml

runtime-shared-library-path选项使用了逗号分割符,分割每个参数值,分别是SWC文件位置,远程服务器RSL URL路径和跨域授权文件路径,提供权限给其他域程序载入RSL。作为RSL的SWF文件在编译时不会被检测,但是其URL会被存储在应用程序中,在运行期间会被检测。

使用跨域RSLs的好处除了减小文件大小和下载时间外,还可以使其他域的程序也能访问到数据,因为很多应用程序都是部署在不同的服务器上,且要使用RSL,你可以更新跨域授权文件中的许可服务器列表。

加支付宝好友偷能量挖...


评论(0)网络
阅读(120)喜欢(0)flash/flex/fcs/AIR