`
keren
  • 浏览: 1585038 次
  • 性别: 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一定要断开。
分享到:
评论

相关推荐

    Flex4.5中air桌面应用 app.xml 配置文件中文注释

    &lt;description&gt;A simple AIR application demonstrating Flex 4.5 features.&lt;/description&gt; &lt;!-- The name of the main SWF file of the application.// 应用程序的主要SWF文件的名称。Required. --&gt; &lt;mainSWF&gt;...

    Myeclipse整合flex4搭建java的Web项目

    1. **Flex通信session监听器**:通过`&lt;listener&gt;`标签配置了`flex.messaging.HttpFlexSession`类,负责处理Flex应用与服务器端的通信session。 2. **MessageBrokerServlet配置**:通过`&lt;servlet&gt;`标签定义了一个名为...

    flex-ibatis-sping项目的创建

    ### flex-ibatis-spring项目的创建详解 #### 一、项目概述 在当前软件开发领域,结合多种技术栈来构建高效稳定的应用系统已成为一种趋势。本文档将详细介绍如何创建一个基于`flex`、`ibatis`(现已更名为MyBatis)...

    flex与struts2整合

    &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;/servlet&gt; ``` 五、创建Flex客户端与Action 在Flex端,我们需要...

    flex与java通信

    &lt;service id="flex-service" class="flex.messaging.services.RemotingService"&gt; &lt;destination id="employeeService"&gt; &lt;adapters&gt; &lt;adapter configuration-id="java-object"/&gt; &lt;/adapters&gt; &lt;properties&gt; ...

    整合Flex和Java--配置篇

    &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;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; ...

    《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搭建步骤

    &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;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; ...

    shiro 与 spring 整合、动态过滤链、以及认证、授权.docx

    Apache Shiro 是一个轻量级的安全管理框架,与 Spring Security 相比,它的认证和授权流程更为简单易懂。Shiro 提供了原生会话(native-session)机制,允许在不依赖容器的 Session 实现情况下,存储和管理用户的...

    Flex-jsp两个必要jar包

    在这个过程中,`flex-bootstrap-jsp.jar` 和 `flex-sdk-merged.jar` 是两个至关重要的组件。下面将详细介绍这两个jar包的作用以及如何在JSP中集成Flex。 `flex-bootstrap-jsp.jar` 是一个关键的库文件,主要用于在...

    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)

    页面设计常用的方式之一div应用

    在网页设计中,`&lt;div&gt;`(division)标签是一个非常重要的元素,用于组织和分隔内容,实现页面的布局和结构。本篇文章将探讨如何利用`&lt;div&gt;`标签以及CSS来实现页面上的元素平行排列,特别是针对两个表格的并排展示。 ...

    Blazeds_Flex_Java_new

    &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;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; ...

    大学生抗疫逆行者网页作业 感动人物HTML网页代码成品 最美逆行者dreamweaver网页模板 致敬疫情感动人物网页设计制作

    &lt;li&gt;&lt;ahref="#heroes"&gt;感动人物&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;ahref="#moments"&gt;动人瞬间&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;ahref="#videos"&gt;感人视频&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;ahref="#gallery"&gt;感动图集&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;ahref="#news"&gt;感动新闻&lt;/a&gt;&lt;/li&gt; ...

    BlazeDS配置安装

    &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;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; ...

    Flex与Spring整合详解

    &lt;param-value&gt;/WEB-INF/flex/hotfixes,/WEB-INF/flex/jars&lt;/param-value&gt; &lt;/context-param&gt; &lt;listener&gt; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt; &lt;/listener&gt; ...

Global site tag (gtag.js) - Google Analytics