FineReport跨域单点登录实现:IFrame实例与步骤

需积分: 50 8 下载量 34 浏览量 更新于2024-09-11 收藏 192KB PDF 举报
在表格制作软件Finereport中实现iframe跨域单点登录是一项常见的需求,尤其当oa系统和报表系统部署在不同的服务器时。Finereport是一款强大的报表开发工具,支持在网页应用中嵌入报表并处理跨域问题。本文主要讲解如何在Finereport中利用iframe技术来实现oa系统与报表系统的单点登录流程。 首先,问题的关键在于解决跨域问题。通常,由于安全限制,浏览器不允许一个域的页面直接访问另一个域的资源,但通过iframe可以间接实现数据交互。在oa系统中,你需要在登录界面添加一个隐藏的iframe元素,用于承载finereport的报表认证请求。 实现思路如下: 1. **创建嵌入式iframe**: 当用户在oa系统的登录页面填写用户名和密码后,触发`doSubmit()`方法。这个方法首先获取用户输入的用户名和密码,然后创建一个新的iframe元素(`document.createElement("iframe")`)。 2. **设置iframe源地址**: 将finereport的报表认证地址作为iframe的`src`属性,例如:`scr.src="http://localhost:8075/WebReport/ReportServer?op=fs_load&cmd=sso&username="+username+"&password="+password;`。这样,oa系统的请求会通过iframe发送到finereport服务器进行身份验证。 3. **处理跨域兼容性**: 考虑到不同浏览器可能对iframe的使用存在细微差别,代码中需要针对浏览器的差异进行适配,比如IE系列的浏览器可能需要使用`document.domain`属性来调整同源策略。具体实现可能涉及到JavaScript的`window.postMessage()`或者JSONP等技术。 4. **将iframe添加到页面**: 创建好的iframe标签被插入到oa系统的登录页面的`<head>`部分,确保它能在用户点击登录按钮时立即加载并执行finereport的认证逻辑。 5. **异步交互**: 跨域登录过程中,oa系统与finereport之间的通信通常是异步的。用户点击登录后,oa系统等待iframe中的认证结果,这通常是通过监听iframe的`load`事件或设置iframe的`postMessage`监听器来实现的。 总结来说,通过在oa系统登录页面中嵌套一个iframe,并将finereport的认证请求导向该iframe,结合适当处理跨域兼容性,可以实现在不同服务器环境下,用户仅需一次登录即可访问包含在iframe中的finereport报表。这对于提升用户体验和简化管理是非常有帮助的。如果你需要使用finereport,可以从其官方网站下载试用版(<http://www.finereport.com/products/trial>),然后根据上述步骤进行实际操作和配置。