就在那时,我被沙箱安全冲突问题搞得郁闷了两天,查遍各大论坛啊,都没有正确的答案,当时什么方法都试了,都不见效。2011年3月8日,沙箱安全冲突问题得到了解决。
总结一下:
从第一次碰到安全沙箱问题到现在,整整两天,让我不得不怀疑adobe的这个设计,这样的设计对于开发人员来说到底是不是好事、、、
在群里,得到了一位十分好的好心人的帮助,给了我一个简单的实例,才得以解决问题,原来还得开一个843端口来发送安全策略文件。
还有一个,刚才测试时,我边听歌边测试,可服务器就是开不起来,呵呵,先笑一下。
查了端口一看,843居然被“哈喽 酷狗”占了,靠。大家也要小心哦。
现在附上授权服务代码
另启一线程:
//授权服务
| Authorization authorer = new Authorization(); Thread cossThred = new Thread(authorer); cossThred.start(); |
Authorization 类:
| import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class Authorization implements Runnable { private ServerSocket Authorerserver; private String crossXml = "<?xml version='1.0'?><cross-domain-policy><allow-access-from domain='*' to-ports='9999'/></cross-domain-policy>"; //授权文件内容,自己改 private String charCode = "UTF-8";//授权端口编码格式 public Authorization() { try { Authorerserver = new ServerSocket(843); } catch (IOException e) { System.out.println("flex授权服务器启动失败,已退出"); e.printStackTrace(); System.exit(0); } } public String getCharCode() { return charCode; } public void setCharCode(String charCode) { this.charCode = charCode; } public String getCrossXml() { return crossXml; } public void setCrossXml(String crossXml) { this.crossXml = crossXml; } public void run() { while (true) { Socket client = null; try { System.out.println("授权服务器已启动"); client = Authorerserver.accept(); InputStreamReader input = new InputStreamReader(client.getInputStream(),charCode); BufferedReader reader = new BufferedReader(input); OutputStreamWriter output = new OutputStreamWriter(client.getOutputStream(),charCode); BufferedWriter writer = new BufferedWriter(output); StringBuilder sb = new StringBuilder(); int request = 0; while ((request = reader.read()) != -1) { if (request != '\0') { sb.append((char) request); } else break; } String message = sb.toString(); if (message.indexOf("<policy-file-request/>") >= 0) { writer.write(crossXml + "\0"); writer.flush(); System.out.println("发送授权信息"); } client.close(); } catch (Exception e) { e.printStackTrace(); try { if (client != null) { client.close(); client = null; } } catch (IOException ex) { ex.printStackTrace(); } finally { System.gc(); } } } } } |
授权文件中的IP和端口就看你的服务器上的了
尽量把授权线程开启放在服务器开启之前,而且其生命周期得伴随整个服务器进程。
好了,希望大家能成功!:-103)
此篇发表在www.ccflash.com,复制麻烦保留此行.
回复