1. 问题描述 对于OA系统中想实现对FineReport的单点登录,用户需要在OA的登录界面中将用户名和密码传入到报表的认证地址进行认证,若OA系统和报表系统不是部署在同一台服务器上,在进行登录时进行跨域,在上一节介绍了ajax跨域异步单点登陆,那么要如何通过iframe方式实现OA系统和报表系统的跨域登录呢? 2. 实现思路 在OA系统的登录界面的js中将报表先把权限验证地址以iframe的方式嵌入,解决js跨域问题,然后再在iframe里面触发表单登录事件,实现登录页面的跳转。 3. 示例(数据决策系统op=fs) 以登陆数据决策系统(op=fs)为例,通过简化的OA登录页面说明iframe跨域单点登录的实现步骤: 数据决策系统(op=fs)身份验证地址为:
3.1 iframe实现步骤
用户输入用户名密码后点击提交或登录按钮时,触发doSubmit()方法,该方法中先创建一个iframe,然后将报表验证用户名密码的认证地址指向此iframe的src,并对使用的浏览器进行判断因为每个浏览器注册写法不太一样,然后将此iframe标签加入到head标签中,实现报表认证代码如下:
注:由于编码的问题,要对输入的用户名和密码进行cjkEncode编码,需要引入finereport.js,在head标签中引入finereport.js,如下:
另:如果登录页面所在工程不是FineReport的工程,则无法引入finereport.js,自定义cjkEncode函数,示例中没有进行编码转换。
修改后即可以实现跨域单点登录的代码如下:
说明:用户名密码表单中使用button来触发doSubmit(),您只要将doSubmit()方法加入到您的OA的登录页面中即可,为了简化操作,完整代码中没有跳转到指定页面,直接跳转到op=fs压面。 4. 示例(平台管理op=fr_platform登录) 将上面的scr.src地址换成平台管理的报表身份验证地址即可:
5. 注销用户 5.1 管理平台的登出 当注销项目用户时,同时也希望注销报表用户名的session,即退出管理平台,这时可在点击退出按钮时调用一下报表登出验证方法:/WebReport/ReportServer?op=auth_logout就可以实现FR管理平台的退出登录。 5.2 数据决策系统(op=fs)的登出 当将FineReport的决策系统集成到项目中时,注销项目用户,同时也希望注销决策系统的用户名session,即退出决策系统,其登出方法为:/WebReport/ReportServer?op=fs_load&cmd=logout就可以实现FR决策系统的登出。
|
|