Page tree
Skip to end of metadata
Go to start of metadata

在系统集成中,用户为了统一门户,一般都会要求多个系统实现单点登录。在第三方系统中通过编写 JavaScript 代码,调用 Smartbi 浏览器端SDK 中的方法进行登录即可。浏览器端SDK 通过 JavaScript API 提供多个客户端组件供外部调用,满足非 J2EE 平台的客户环境(如.Net平台)实现与 Smartbi 系统的集成要求。具体操作步骤如下:


1、首先部署Smartbi服务器。假设Smartbi已经部署到应用服务器中,访问地址为:http://localhost:8080/smartbi
 
2、将导航到smartbi\vision\js\freequery\lang\JSLoader.js拖放到本地文件夹中,然后将其添加到自己的项目中。如果使用的是smartbi.war,则可用WinRAR之类的压缩工具打开部署文件smartbi.war并导航到smartbi.war\vision\js\freequery\lang目录下,来获得JSLoader.js。

   
3、需要修改添加到项目中的JSLoader.js文件。打开该文件,将最后部分的9行代码注释或删除掉,下图中红色矩形框标示的部分。

   
4、在第三方系统处理用户登录的代码位置(比如登录成功后的代码处理分支处),插入以下单点登录Smartbi的代码。对调用login方法的返回结果进行测试,为true则登录成功;否则登录失败。


5、完整的示例代码如下。

<HTML>
<HEAD>
    <TITLE>第三方系统如何单点登录到Smartbi </TITLE>
    <SCRIPT type="text/javascript" src="/js/JSLoader.js"></SCRIPT>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
    //smartbi服务器的URL地址
    var config = new Object();
    config.baseURL = "http://localhost:8080/smartbi/vision/";
    var BOF_UI_DEBUG = false;
    // 创建全局唯一的JS装载器
    var jsloader = new JSLoader(config);
    // 创建应用程序对象
    var userService = jsloader.imports("bof.usermanager.UserService");
    // 通过userService.getInstance()可以调用所有的UserManagerModule方法.
    var result = userService.getInstance().login("admin", "manager");
    if (result) {
        alert("OK");
    } else {
        alert("登录失败");
    }
</SCRIPT>
</BODY>
</HTML>


6、至此单点登录就完成了。但是如果Smartbi与第三方系统部署在不同的机器上,或者部署在同一机器不同的应用服务器域下,即出现跨域访问,则系统在访问过程中有可能出现各种奇怪问题。解决跨域访问,请参考:Smartbi与第三方系统集成跨域问题解决办法

 

注意!

JSLoader.js不支持file协议,如果使用该js库的HTML直接在本地打开会报错下面的错误。必须要将其部署到网络上,通过HTTP等协议访问才能正常工作。

报错信息如下:XMLHttpRequest cannot load ${本地URL}. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

 

 

  • No labels