`
hjwromantic
  • 浏览: 26673 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

Flex跨域访问沙箱问题解决

 
阅读更多

当Flex访问Web服务请求(你的项目中某个serlvet等资源)时,在本地能够正常访问,当部署到web容器中发布为web服务后,再请求服务端的业务方法时候,此时就会被拒绝访问,Flex客户端会出现连接超时等问题,这就是Flex跨域访问的沙箱问题,为了解决Flex跨域访问web中的业务服务问题,可采用如下处理方法:

我们知道Flex跨域访问被拒绝是因为提供服务方没有配置安全策略文件,即crossdomain.xml,如果你不想用crossdomain.xml就要用到代理,即自己写一个后台读取webservice,然后提供给自己的flex客户端应用,因为在运行环境中,要Flex跨域必须要有策略文件。

以下是我项目应用的策略文件的写法格式:(当然这个文件内容可根据你项目的集体要求来配置相应的内容

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <!-- 
    permitted-cross-domain-policies属性值
    none  不允许使用 loadPolicyFile方法加载任何策略文件(包含主策略文件)
	master-only 只允许使用主策略文件,默认属性
	by-content-type允许使用 loadPolicyFile方法加载http/https协议下Content-Type为text/x-cross-domain-policy的文件作为跨域策略文件
	by-ftp-filename允许使用 loadPolicyFile 方法加载FTP协议下的文件名为  crossdomain .xml的文件作为跨域策略文件
     -->
	<site-control permitted-cross-domain-policies="by-content-type" />
	<allow-access-from domain="*" to-ports="*"/>
	<allow-http-request-headers-from domain="*" headers="*" />
</cross-domain-policy>

表示外部域可以依据策略文件设定的规则来访问该服务。crossdomain.xml的放置目录问题,可放置在:

1、如果放置crossdomain.xml目录是容器的根目录,那么可以通过以下的url访问crossdomain.xml:

http://localhost:8080/crossdomain.xml

也就是说如果你的web应用部署在Tomcat的的话,请将crossdomain.xml文件放在webapps下的ROOT项目中即可。如果是其他web容器按照以上规则来定。

2、如果crossdomain.xml不是放在根目录下,而是在某个web应用程序下的话,在flex中就需要在初始化的时候调用一下方法:(这样就可以再同一个web容器下部署多个不一样的主策略规则,本人使用这方式自定义规则文件的位置)

Security.loadPolicyFile("http://localhost:8080/jplogic/crossdomain.xml");

其中jplogic为webapp的名称,可以根据自己项目名称来定

这样,在你项目中的动态页面(jsp.asp中嵌入Flex时候,当用户请求该资源的时候,那么这个时候如果jsp或者asp中的Flex需要请求其他站内资源(servlet)的时候就不会出现跨域访问问题了)。

如下是我在项目中关于该问题处理效果图:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics