跨域单点登录、iframe实现跨域单点登录,自定义登录,登陆界面,登出,注销用户,用户注销,退出登陆。
1. 问题描述
对于OA系统中想实现对FineReport的单点登录,由用户登录章节中可以得知,用户需要在OA的登录界面中用ajax将用户名和密码传入到报表的认证地址进行认证,但是若OA系统和报表系统不是部署在同一台服务器上,在进行登录时会遇到跨域访问的问题,拒绝访问,那么要如何实现OA系统和报表系统的跨域登录呢? 2. 实现思路
在OA系统的登录界面的js中将报表的权限验证地址以iframe的方式嵌入,解决js跨域问题。
3. 示例
我们以简化了的OA登录页面说明实现步骤:
3.1 登录按钮事件设置
用户输入用户名密码后点击提交或登录按钮时,触发doSubmit()方法,该方法中先创建一个iframe,然后将报表验证用户名密码的认证地址指向此iframe的src,并对使用的浏览器进行判断因为每个浏览器注册写法不太一样,然后将此iframe标签加入到head标签中,实现报表认证代码如下:
注:由于编码的问题,要对输入的用户名和密码进行cjkEncode编码,需要引入finereport.js,在head标签中引入finereport.js,如下:
也可以自己写cjkEncode函数,实现方法见编码转换文档。 3.2 完整代码
如您原来的登录界面的代码如下:
修改后即可以实现跨域单点登录的代码如下:
说明:用户名密码表单中使用button来触发doSubmit(),您只要将doSubmit()方法加入到您的OA的登录页面中即可。
报表通过url传用户名和密码进行验证,传到报表服务器是以session的方式保存,防止被人中途拦截会导致系统泄密,可以对登录进来的密码进行加密,可参考文档权限之密码加密;或者使用https证书,让请求在传输过程中加密,配置方法也很简单,修改下服务器的配置文件就行了。这种方式还存在一个证书合法性问题,用自己生成的证书,客户端在访问报表中浏览器会显示证书非法警告,所以需要去购买合法证书。目前国内最便宜的证书一年是一千多元。 3.3 注销用户
当注销项目用户时,同时也希望注销报表用户名的session,这时可在点击退出按钮时调用一下报表登录验证方法:/WebReport/ReportServer?op=auth_logout就可以实现FR报表的退出登录。
返回顶部