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)的时候就不会出现跨域访问问题了)。 ? 如下是我在项目中关于该问题处理效果图: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |