Summary: 基于Web 的flex 程序,后台采用的是Java(Spring+Hibernate+BlazeDS)技术;系统中有一个是订阅RSS的功能。在本地测试无任何问题,一旦部署在Tomcat下,RSS的HTTPService请求失败。为了确定其原因,只好将faultEvent的faultString、faultDetail属性输出在Log日志中去。
最后,发现是faultString:Security error accessing url。
faultDetail:Destination: DefaultHTTP。
google一下,发现大多人都遇到过这种情况。其中有一个比较详细:http://www.judahfrangipane.com/blog/?p=113
但他提到的3种方法,第1和第3种我都试了不起作用。第2种方法,Service改动太大,不是我所希望的。
Requirement: 客户端UI通过后台Serive的代理,能够正常地访问RSS feed.
Solution: BlazeDS 提示了代理服务,帮助客户端完成跨域访问。
1. Service端
在服务器端的配置文件中,找到proxy-config.xml文件,里面有一个默认的destination节点: <destination id="DefaultHTTP"> </destination>
默认代理的destination将转向客户端指定的URL进行请求。首先你必须使用dynamic-url属性来指定允许代理的destinations.如下:
把你要访问的URL都配置到dynamic-url节点里。
<properties>
<dynamic-url>http://cnn.com/* </dynamic-url>
<dynamic-url>http://news.yahoo.com/* </dynamic-url>
</properties>
</destination>
<mx:WebService url=”http://cnn.com/api?wsdl” useProxy=”true” />