最近在做一个系统整合的项目,目的是把某政府机关中的N个系统进行深度整合。由于这些系统分属于多家不同公司,无法拿到系统的源代码。
初步构思是使用Frame/IFrame将对方的系统加载到页面中,然后用Javascript模拟用户的操作去获取或设置某些信息,以达到深度整合的目的。
技术上没有什么太难得地方,但是发觉Javascript无法操作Frame/IFrame内容是不同域的页面中的DOM,报出的错误提示的“没有权限”。Google了一下,原来这种操作被成为跨站脚本(XSS),是被浏览器禁止的。
解决这个问题的思路是使用代理服务器,将其他系统映射到整合系统所在的服务器上。这样在浏览器看来所有的系统都是同一台服务器的,就解决了XSS的限制。
我们在这里选用nginx做代理,首先去nginx.org下载程序,nginx支持Windows和*nix操作系统。在开发环境中,我们选用Windows版本。
下载完成后,打开conf/nginx.conf,将旧的server节点完全删除。在删除的位置上添加下面代码
这段配置信息的作用告诉nginx创建一个服务,监听在8081端口上,当用户访问该Web服务根目录的时候,代理到http://192.168.1.10:8000端口。
配置完成后,现在就可以在页面中的Frame/IFrame中访问http://server_addr:8081/了,也可以用Javascript操作Frame/IFrame中的DOM元素。
整合多个系统就配置多个server节点,将每个系统配置在不同的端口上既可。
初步构思是使用Frame/IFrame将对方的系统加载到页面中,然后用Javascript模拟用户的操作去获取或设置某些信息,以达到深度整合的目的。
技术上没有什么太难得地方,但是发觉Javascript无法操作Frame/IFrame内容是不同域的页面中的DOM,报出的错误提示的“没有权限”。Google了一下,原来这种操作被成为跨站脚本(XSS),是被浏览器禁止的。
解决这个问题的思路是使用代理服务器,将其他系统映射到整合系统所在的服务器上。这样在浏览器看来所有的系统都是同一台服务器的,就解决了XSS的限制。
我们在这里选用nginx做代理,首先去nginx.org下载程序,nginx支持Windows和*nix操作系统。在开发环境中,我们选用Windows版本。
下载完成后,打开conf/nginx.conf,将旧的server节点完全删除。在删除的位置上添加下面代码
server {
listen 8081;
location / {
proxy_pass http://192.168.1.10:8000;
}
这段配置信息的作用告诉nginx创建一个服务,监听在8081端口上,当用户访问该Web服务根目录的时候,代理到http://192.168.1.10:8000端口。
配置完成后,现在就可以在页面中的Frame/IFrame中访问http://server_addr:8081/了,也可以用Javascript操作Frame/IFrame中的DOM元素。
整合多个系统就配置多个server节点,将每个系统配置在不同的端口上既可。