天地图截屏打印时安全沙箱冲突的解决办法
2012-05-22 20:46
627 查看
自己用flex api写的调用国家天地图的应用程序在发布到服务器上之后,发现在打印和截屏的时候会出现“安全沙箱冲突”的错误信息
其实这是flex的一种安全策略
关于解决这种冲突的方法,网上说的天花乱坠,各种解决方法,本人比较熟悉的是以下两种方式
1)在地图服务器根目录下放置crossdomain.xml跨域文件
2)写代理
由于国家天地图服务器远在首都,基本上方法1) 目前来说无法实现,所以只能通过方法2)写代理的方式
本人写了一servlet实现代理天地图瓦片服务的功能
String type = request.getParameter("T");
String x = request.getParameter("X");
String y = request.getParameter("Y");
String l = request.getParameter("L");
long index = Math.round(Math.random() * 7);
/*
* 一幅完整的图片url有如下格式:http://tile0.tianditu.com/DataServer?T=siwei0608&X=6666&Y=1406&L=13
*/
String spec = "http://tile" + index + ".tianditu.com/DataServer?T=" + type + "&X=" + x + "&Y=" + y + "&L=" + l;
URL url = new URL(spec);
URLConnection urlConnection = url.openConnection();
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
response.setContentType("image/png");
OutputStream outputStream = response.getOutputStream();
byte b[] = new byte[1];
while (-1 != inputStream.read(b, 0, 1))
outputStream.write(b, 0, 1);
inputStream.close();
outputStream.close();发布此servlet之后,在flex api中浏览地图,通过fire bug跟踪发现客户端取的瓦片地址是本机发布的代理地址
如http://localhost:8080/xtgeomaps_app/GJTianditu?T=siwei0608&X=6666&Y=1406&L=13而不是
http://tile0.tianditu.com/DataServer?T=siwei0608&X=6666&Y=1406&L=13
通过这种代理的方式,用户可以随心所欲地截图与打印了。
必须说明的是,这种代理的方式,客户端要取得瓦片,经过了两个服务器,一个是国家天地图服务器,一个是本地服务器,在响应速度方面肯定会受一定的影响的。
其实这是flex的一种安全策略
关于解决这种冲突的方法,网上说的天花乱坠,各种解决方法,本人比较熟悉的是以下两种方式
1)在地图服务器根目录下放置crossdomain.xml跨域文件
2)写代理
由于国家天地图服务器远在首都,基本上方法1) 目前来说无法实现,所以只能通过方法2)写代理的方式
本人写了一servlet实现代理天地图瓦片服务的功能
String type = request.getParameter("T");
String x = request.getParameter("X");
String y = request.getParameter("Y");
String l = request.getParameter("L");
long index = Math.round(Math.random() * 7);
/*
* 一幅完整的图片url有如下格式:http://tile0.tianditu.com/DataServer?T=siwei0608&X=6666&Y=1406&L=13
*/
String spec = "http://tile" + index + ".tianditu.com/DataServer?T=" + type + "&X=" + x + "&Y=" + y + "&L=" + l;
URL url = new URL(spec);
URLConnection urlConnection = url.openConnection();
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
response.setContentType("image/png");
OutputStream outputStream = response.getOutputStream();
byte b[] = new byte[1];
while (-1 != inputStream.read(b, 0, 1))
outputStream.write(b, 0, 1);
inputStream.close();
outputStream.close();发布此servlet之后,在flex api中浏览地图,通过fire bug跟踪发现客户端取的瓦片地址是本机发布的代理地址
如http://localhost:8080/xtgeomaps_app/GJTianditu?T=siwei0608&X=6666&Y=1406&L=13而不是
http://tile0.tianditu.com/DataServer?T=siwei0608&X=6666&Y=1406&L=13
通过这种代理的方式,用户可以随心所欲地截图与打印了。
必须说明的是,这种代理的方式,客户端要取得瓦片,经过了两个服务器,一个是国家天地图服务器,一个是本地服务器,在响应速度方面肯定会受一定的影响的。
相关文章推荐
- [ActionScript 3.0] AS3.0 调试出现安全沙箱冲突错误解决办法
- flex 跨域访问 #2048: 安全沙箱冲突 问题解决方法
- 关于VS2008 中添加成员变量提示 此网站的某个加载项运行失败 请检查“Internet选项”中的安全设置是否存在潜在冲突 问题解决办法
- 解决AS3请求数据的“安全沙箱冲突”问题
- 本地安全沙箱最快解决办法
- 关于VS2008 中添加成员变量提示 此网站的某个加载项运行失败 请检查“Internet选项”中的安全设置是否存在潜在冲突 问题解决办法
- 关于flex安全沙箱冲突解决方法!
- Flash Socket 安全沙箱冲突问题解决
- FMS/AMS服务器和客户端在同一台机器时出现“安全沙箱冲突”的解决方法
- Flash实现Websocket的跨域问题-安全沙箱问题解决办法
- Arcgis for Flex #2048安全沙箱冲突解决方法
- as3的Error #2060 安全沙箱冲突ExternalInterface 的解决方法
- arcgis flex api 由于沙箱安全的原因 无法显示地图 的解决办法
- AS3安全沙箱问题读取解决办法
- 安全沙箱冲突:ExternalInterface解决方法 js调用域的问题
- 几种访问其他域swf文件,或本地浏览器运行环境【安全沙箱】冲突解决方法
- Arcgis for Flex #2048安全沙箱冲突解决方法
- CentOS 6下MYSQL与crontab安装冲突的解决办法
- 织梦DedeCms的安全问题解决办法(安全设置)
- chrome浏览器控制台 console不打印信息问题解决办法。