flex 跨域访问解决方案的总结

其实解决方案网上的资料很多,都是添加一个策略文件crossdomain.xml,本文主要是介绍怎么加这个文件。

crossdomain.xml文件内容(*号部分自己可根据需要进行配置):

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <allow-access-from domain="*"/>
    <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

 

首先,明确一点,A应用要请求B应用的资源,这个策略文件是要添加到B应用的,刚开始,看了某些博文说是要添加到A应用,误导了我很久。

 

下面是正文

1.tomcat服务器的配置方式很简单,直接把文件丢到webapps/ROOT下,前提是保证tomcat 的webapps目录结构完整

 

2.主要讲讲weblogic(我的版本是12C)的配置,有点麻烦,最后的成功是反复测试测出来的,具体的原理本人也不是很懂。

1)给B应用所在的服务器添加一个默认应用C,

也就是只要输入http://xxxx:7001/后面不需要加项目上下文就能访问的应用。我的做法是通过服务器后台console进行配置,这个稍后再说。

新建一个项目index,

index

    --WEB-INF

             --web.xml

    --crossdomain.xml

    --index.jsp

有博文说在index项目根目录下添加weblogic.xml文件,内容设置为

<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1
//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
  <container-descriptor>
    <index-directory-enabled>true</index-directory-enabled>
    <default-mime-type>text/x-cross-domain-policy</default-mime-type>
  </container-descriptor>
  <context-root>/</context-root>
</weblogic-web-app>

 

但我试了没成功,所以我的目录就这么简单,附下文件内容,都很简单的:

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN
" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp_ID">
<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

 

 

2)配置服务器默认应用
在Weblogic控制台中,Admin Console -> Servers -> DefaultServer(AdminServer) -> Protocols -> HTTP -> Default WebApp Context Root:修改为Web应用的 Java EE Web Context Root(这里即项目名称index),保存,不需要重启Weblogic。
但是在我的实际情况中,我觉得很坑但是很重要很关键的一点是,每次对index项目进行操作,比如stop掉再start、update甚至重启整个weblogic,配置默认应用的操作都要重新来一次,即使默认应用已经是index,你还是需要先把它置空,保存,再填进去,再保存,否则,你是不能通过http://xxxx:7001/去访问index应用的,结果会是404,而http://xxxx:7001/index可以的。
我不懂weblogic的原理,也就不知道这种情况究竟是个BUG还是我自己的问题,待以后再慢慢研究吧
3)如上,如果默认应用能正常访问了,接下来通过A应用去调用B应用,自然也就能够成功,反之,则会报大家遇到的”安全沙箱冲突 “的错误

 

参考资料:

 

http://support.esrichina-bj.cn/2009/0720/456.html
http://linuxstuding.iteye.com/blog/1224107

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(跨域,weblogic,Flex)