您的位置:首页 > 其它

Flash 安全策略配置(1)

2009-04-09 18:40 281 查看
最近在Flash与Jsp通信的时候,会发现Flash不能与JSP相互发信息。真是一件很郁闷的事情,把官方文档看了一下,发现了一个简单解决办法。官方提供的第一种办法是,用户管理控制。这种全局的解决方法,可以解决Flash与Jsp通信的一个问题。



解决的办法如下:

第一步

请在系统里面找到这个路径目录:

C:/WINDOWS/system32/Macromed/Flash/FlashPlayerTrust



FlashPlayerTrust这个文件夹是一个信任区域。如图:



我们可以见到几个后缀的文件,xxx.cfg的文件。为了能够解决Flash与jSp的通信问题,我在这个目录下创建一个名为dev的文本:







第二步:

创建dev.txt的文本,然后写上Flash的文件所在目录,我把这个目录放在I盘的Test文件夹里面,然后修改后缀变成了cfg文件

如图:dev.cfg文件







文件的所在目录:









准备完后,开始测试我们的文件:

准备一个JSP文件,如下,准备接受客户端返回来的两个信息

<%@ page language="java" pageEncoding="UTF-8"
%><%String username=request.getParameter("username");
String userpwd=request.getParameter("userpwd");
out.println("msg="+username);
%>






准备客户端:简单的测试一下。

package 
{
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.events.*;
	import flash.net.URLVariables;
	import flash.net.URLLoaderDataFormat;
	import flash.net.*;
	public class Connect extends EventDispatcher
	{
		//连接的网址 
		public static  const myurl:String="http://localhost:8080/flash2/receive.jsp";
		public function Connect()
		{
			
		}
		public function sendMessage(para:URLVariables,myurl:String):void
		{//设置发送数据的变量 

			//设置发送数据的方式 
			var request:URLRequest=new URLRequest();
			request.url=myurl;
			request.method=URLRequestMethod.POST;//发送的方式 post 
			request.data=para;

			//发送数据 
			var loader:URLLoader=new URLLoader();
			loader.dataFormat=URLLoaderDataFormat.VARIABLES;//发送数据的格式 
			loader.addEventListener(Event.COMPLETE,completeHandler);
			loader.addEventListener(IOErrorEvent.IO_ERROR ,IoHandler);
			loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,SecurityHandler);
			loader.load(request);
		}
		private function completeHandler(event:Event):void
		{
			var loader:URLLoader=URLLoader(event.target);
			trace(loader.data);
			trace(loader.data.msg);
		}
		private function IoHandler(event:IOErrorEvent):void
		{
			trace("wrong");
		}
		private function SecurityHandler(event:SecurityErrorEvent):void
		{
			trace("wrong2");
		}
	}
}




package 
{
	import flash.display.Sprite;
	import flash.events.*;
	import flash.text.*;
	import flash.display.SimpleButton;
	import fl.controls.Button;
	import flash.net.*;
	public class main extends Sprite
	{
		private var con:Connect;
		private var username:TextField;
		private var pwd:TextField;
		public function main()
		{
			con=new Connect();
			
			init();
		}
		
		private function init():void
		{

			username=new TextField();
			addChild(username);
			username.width=200;
			username.height=20;
			username.x=stage.stageWidth/2;
			username.y=stage.stageHeight/2;
			username.type = TextFieldType.INPUT;//输入方式
			username.border = true;//边框
			username.background = true;

			pwd=new TextField();
			addChild(pwd);
			pwd.width=200;
			pwd.height=20;
			pwd.x=stage.stageWidth/2;
			pwd.y=stage.stageHeight/2+22;
			pwd.type = TextFieldType.INPUT;//输入方式
			pwd.border = true;//边框
			pwd.background = true;

			var btn:Button=new Button();
			addChild(btn);
			btn.width=40;
			btn.height=20;
			btn.label="Send";
			btn.x=stage.stageWidth/2;
			btn.y=stage.stageHeight/2+50;
			btn.addEventListener(MouseEvent.CLICK,SendHander);

		}
		private function SendHander(e:MouseEvent):void
		{
			if (username.text!="" && pwd.text!="")
			{
				trace("send ok");
				var para:URLVariables=new URLVariables();
				para.username=username.text;
				para.userpwd=pwd.text;
				con.sendMessage(para,Connect.myurl);
			} else
			{
				trace("不能发送空信息");
			}
		}
	}
}




这样就可以简单发送一下信息了,由于程序还是可以完善这里懒惰一下,主要说明的是那个安全配置的问题








在程序里面,我们要小心

public static const myurl:String="http://localhost:8080/flash2/receive.jsp";



我们的swf文件 不在tomcat目录下,只要在其他盘里面。在本地测试的时候,可以在

C:/WINDOWS/system32/Macromed/Flash/FlashPlayerTrust



添加swf文件的所在目录,这样简单的问题就可以解决。现在可以通信了。





注意:防火墙的引发的问题,有时候会拦截消息,因此关闭测试就没有事情了。当然这仅仅是一种特殊的情况
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: