`
keren
  • 浏览: 1559110 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]Flex Socket安全策略<policy-file-request/>及应对方法

    博客分类:
  • Flex
 
阅读更多
http://hi.baidu.com/dobodo/blog/item/b1614aea02efe8dfd439c967.html
在 Adobe Flash Player 升级到 9.0.124 后,由于安全策略更改,原来 Socket 或 XmlSocket 的应用里的 http 方式加载安全策略的手段不能继续使用。更改如下:

1, 首先检测目标服务器的 843 端口是否提供安全策略
2, 如果 1 没有检测到策略,则检测 actionscript 是否使用了 Security.loadPolicyFile(xmlsocket://)手段提供安全策略,如果还没检测到,则使用第 3 步检测
3, 检测目标服务器目标端口是否提供安全策略。


在说具体处理方式前,我先描述一下 Flash Player 的验证过程。在 Flex 程序发出 Socket 或 XmlSocket( 以下统称为 Socket) 请求前, FlashPlayer 会先判断是否为本地调用,如果不是。即用一个 Socket 去链接到你的服务端,三次握手成功后一方面发出字符串“ <policy-file-request/>\0 “另一方面监听返回的安全策略。安全策略接收成功后, FlashPlayer 就断开验证的 Socket ,然后再运行程序本身的 Socket 。在整个 SWF 运行期间,无论你请求多少次,只要域相同, FlashPlayer 就只验证一次。这里有两个重点:
第一个是验证的 Socket 和程序的 Socket 是两个 Socket 。所以你在本地测试时,服务端监听到 N 个 Socket 请求,但布置到服务端后,服务端会监听到 N+1 个请求。
第二是验证的 Socket 发送“ <policy-file-request/>\0 “请求和接收你的策略文件是没有先后关系的,所以你没必要接收完“ <policy-file-request/>\0 “后才发策略文件。我的做法是只要监听到请求,就把策略字符串发过去。


在Java中,我处理的方法是独立启动一个843端口的服务专门监听授权请求,这样客户端响应速度很快,代码片段如下:
String xml = "<?xml version=\"1.0\"?><cross-domain-policy><site-control permitted-cross-domain-policies=\"all\"/><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>\0";
Socket socket=serverSocket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
PrintWriter pw = new PrintWriter(socket.getOutputStream());
char[] by = new char[22];
br.read(by, 0, 22);
String s = new String(by);
System.out.println("s="+s);
if (s.equals("<policy-file-request/>")) {
  System.out.println("接收policy-file-request");
  pw.print(xml);
  pw.flush();
  br.close();
  pw.close();
  socket.close();
} 

另外,一定要注意 xml 字符串后面的 ”\0” ,因为 Flash Player 是用他来做分隔符的,如果你不加上,客户端验证 socket 可能就一直等待。另外授权接收的socket一定要断开。
分享到:
评论

相关推荐

    《Flex第一步》书中源代码1

    &lt;name&gt;Example_1&lt;/name&gt; &lt;comment&gt;&lt;/comment&gt; &lt;projects&gt; &lt;/projects&gt; &lt;buildSpec&gt; &lt;buildCommand&gt; &lt;name&gt;com.adobe.flexbuilder.project.flexbuilder&lt;/name&gt; &lt;arguments&gt; &lt;/arguments&gt; &lt;/build...

    flex与java通信,通过插件blazed

    &lt;s:request&gt; &lt;!--参数名称必须与webservice中定义的参数名一致否则调用不成功报错--&gt; &lt;theCityName&gt; {city.text} &lt;/theCityName&gt; &lt;/s:operation&gt; &lt;/s:WebService&gt; (需要视频的联系我849877736)

    Red5 0.9与现有tomcat项目整合

    Red5 0.9与现有tomcat项目整合,并实现flex播放视频 修正:将logback.xml的&lt;consolePlugin/&gt;标签去掉,根据情况修改level 将:red5-web.xml名修改为myApp-web.xml,内容修改为 &lt;?xml version="1.0" encoding="UTF-8...

    本地播放器源码仅供交流

    一个本地播放器的源码,学习学习 ... &lt;content&gt;[This value will be overwritten by Flex Builder in the output app.xml]&lt;/content&gt; &lt;visible&gt;true&lt;/visible&gt; &lt;/initialWindow&gt; &lt;/application&gt;

    FLEX嵌入到JSP,实现的 jar 包

    &lt;taglib-location&gt;/WEB-INF/lib/flex-bootstrap-jsp.jar&lt;/taglib-location&gt; &lt;/taglib&gt; 4:如果SERVER开着的话,重启. 5:可以在JSP文件中写FLEX代码了!TADOEBA:===================== test.jsp START =================...

    springgraph.zip

    一个n的flex组件(SpringGraph Flex Component) SpringGraph Flex Component 有几个demo,不多做解释,用了就知道强大了,关于如何使用,以后在慢慢写了。 &lt;A href="http://mark-shepherd.com/thesaurus"&gt;...

    felx嵌入到jsp 所需的 两个 jar包

    &lt;taglib-location&gt;/WEB-INF/lib/flex-bootstrap-jsp.jar&lt;/taglib-location&gt; &lt;/taglib&gt; 4:如果SERVER开着的话,重启. 5:可以在JSP文件中写FLEX代码了!TADOEBA:===================== test.jsp START =================...

    felx嵌入到jsp 所需的jar包

    &lt;taglib-location&gt;/WEB-INF/lib/flex-bootstrap-jsp.jar&lt;/taglib-location&gt; &lt;/taglib&gt; 4:如果SERVER开着的话,重启. 5:可以在JSP文件中写FLEX代码了!TADOEBA:===================== test.jsp START ================...

    小程序开发基础之view视图容器

    &lt;view class=section__title&gt;flex-direction: row&lt;/view&gt; &lt;view class=flex-wrp_one&gt; &lt;view class=flex-item&gt;1&lt;/view&gt; &lt;view class=flex-item&gt;2&lt;/view&gt; &lt;view class=flex-item&gt;3&lt;/view&gt; &lt;/view&gt; &lt;/vie

    壁纸微信小程序源码亲测可用

    壁纸微信小程序源码,无需后台直接导入微信开发者编辑器打包上传就可以使用了 部门代码如下 &lt;view class="top-bar"&gt; &lt;page-title isprev="{{false}}" title="最美壁纸" ... &lt;view class="flex-bar flex-wrap item-img

    Flex实现简单的Email发送

    使用的原理很简单:&lt;br&gt;Flex-Form &lt;--接受用户输入&lt;br&gt; ||&lt;br&gt; ||使用RemoteObject方式就用户输入的数据封装成json格式传递到后台java bean&lt;br&gt; ||&lt;br&gt;Java Bean()---&gt;执行真正的Email发送-----&gt;回馈消息----&gt;Flex-...

    最新图片在线加水印小程序源码亲测可用

    color u-p-l-44"&gt;&lt;button class="u-reset-button" open-type="share"&gt;&lt;image class="share-icon" src="../../static/share.png"&gt;&lt;/image&gt;&lt;/button&gt;&lt;/view&gt;&lt;/top-nav&gt;&lt;view class="u-flex-col"&gt;&lt;add-tips vue-id="8dd...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    &lt;param-name&gt;services.configuration.file&lt;/param-name&gt; &lt;param-value&gt;/WEB-INF/flex/services-config.xml&lt;/param-value&gt; &lt;/init-param&gt; &lt;load-on-startup&gt;0&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    &lt;param-name&gt;services.configuration.file&lt;/param-name&gt; &lt;param-value&gt;/WEB-INF/flex/services-config.xml&lt;/param-value&gt; &lt;/init-param&gt; &lt;load-on-startup&gt;0&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-...

    Flex Olap完整项目源码,可直接运行

    &lt;mx:Script source="include/OLAPAppInFlex.as" /&gt; &lt;mx:Script source="include/Chart.as" /&gt; &lt;mx:Script source="include/FlexBIDataGrid.as" /&gt; &lt;mx:Script source="include/OLAPGridConfigure.as" /&gt; &lt;mx:Style ...

    flex柱状图动态切换数据源实例

    该flex应用程序演示了柱状图动态切换数据源 &lt;mx:ColumnChart x="6" y="65" id="columnchart1" showDataTips="true" dataProvider="{list}" height="390" itemClick="onItemClick(event)"&gt; &lt;mx:horizontalAxis&gt; ...

    css用Flex布局制作简易柱状图的实现

    以下是一个用Flex布局的柱状图: ... &lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt; &lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt; &lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt; &lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt; &lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; CSS: .his_box{ /*盒子

    使用jquery解析XML示例代码

    xml文件结构:books.xml &lt;?xml version=1.0 encoding=UTF-8?&gt; &lt;root&gt; &lt;book id=1&gt; &lt;name&gt;深入浅出extjs&lt;/name&gt; &lt;author&gt;张三&lt;/author&gt; ...&lt;name&gt;深入浅出flex&lt;/name&gt; &lt;author&gt;王五&lt;/author&gt; &lt;price&gt;108&lt;/p

    使用Flex布局实现头部固定内容区域滚动的方法

    页面头部固定布局以前用 position:fixed实现,如今可以用flex布局实现,快捷方便。 Flex布局好处:1.不破坏html文档流 2.兼容性更好。 display: flex 和 display: -webkit-box 仅是各阶段命名,并没有区别。 &lt;view&gt; ...

    flex弹性盒布局最后一行左对齐的实现思路

    使用flex布局,如果是九宫格的话正好可以平分,如图 如果是我们只需要八块,如图 但是我们想让最后一块左对齐,依次排列,需要在元素的父级增加伪... flex-wrap: wrap; justify-content: space-between; } ul:afte

Global site tag (gtag.js) - Google Analytics