版本比较
标识
- 该行被添加。
- 该行被删除。
- 格式已经改变。
在系统集成中,用户为了统一门户,一般都会要求多个系统实现单点登录。在第三方系统中通过编写 JavaScript 代码,调用 Smartbi 浏览器端SDK 中的方法进行登录即可。浏览器端SDK 通过 JavaScript API 提供多个客户端组件供外部调用,满足非 J2EE 平台的客户环境(如.Net平台)实现与 Smartbi 系统的集成要求。
Image Removed
具体操作步骤如下:
1、首先部署Smartbi服务器。假设Smartbi已经部署到应用服务器中,访问地址为:在第三方系统中编写 JSP 页面调用 Smartbi 的服务器端 SDK 进行登录。此方式适用于“在第三方系统中打开Smartbi资源”、“在第三方系统中新建Smartbi资源”和“在第三方中打开功能模块”,而不适用于从第三方系统链接转到Smartbi。具体操作步骤如下:
- 参考开发接口中的服务端SDK方法 的使用步骤,把相关的 jar 包加载到您的 Java 项目的 classpath 中。
- 编写登录代码,调用 SDK 中的相应方法。
- 可以将得到的smartbiCookie 作为参数传入openresource.jsp等页面,必须转码后再传递,例如<a href="http://
2、将导航到smartbi\vision\js\freequery\lang\JSLoader.js拖放到本地文件夹中,然后将其添加到自己的项目中。如果使用的是smartbi.war,则可用WinRAR之类的压缩工具打开部署文件smartbi.war并导航到smartbi.war\vision\js\freequery\lang目录下,来获得JSLoader.js。
Image Removed
3、需要修改添加到项目中的JSLoader.js文件。打开该文件,将最后部分的9行代码注释或删除掉,下图中红色矩形框标示的部分。
Image Removed
4、在第三方系统处理用户登录的代码位置(比如登录成功后的代码处理分支处),插入以下单点登录Smartbi的代码。对调用login方法的返回结果进行测试,为true则登录成功;否则登录失败。
Image Removed
- /vision/openresource.jsp?resid=<资源ID>&smartbiCookie=<%=java.net.URLEncoder.encode(conn.getCookie(), "UTF-8")%>">
代码块 | ||||
---|---|---|---|---|
| ||||
<HTML><%@ <HEAD> <TITLE>第三方系统如何单点登录到Smartbi </TITLE> <SCRIPT type="text/javascript" src="/js/JSLoader.js"></SCRIPT> </HEAD> <BODY> <SCRIPT LANGUAGE="JavaScript"> //smartbi服务器的URL地址page contentType="text/html; charset=GBK" import="java.util.*, smartbi.sdk.ClientConnector, smartbi.sdk.service.user.UserManagerService" %> <% request.setCharacterEncoding("GBK"); String user ="admin"; varString configpassword = new Object();"manager"; String config.baseURLsmartbiURL = "http://localhost:808018080/smartbi/vision/"; var BOF_UI_DEBUGClientConnector conn = false;new ClientConnector(smartbiURL); // 创建全局唯一的JS装载器建立此连接时,就对smartbi进行了登录 varboolean jsloaderret = new JSLoader(config); conn.open(user, password); if (!ret) { %> <script> // 创建应用程序对象 var userService = jsloader.importsalert("bof.usermanager.UserService登录失败!"); // 通过userService.getInstance()可以调用所有的UserManagerModule方法.</script> <% } else { %> var result = userService.getInstance().login("admin", "manager"); <script> if (result) { alert("OK登录成功!"); // 获取smartbi的cookie,在集成页面需要传递smartbiCookie值,以保证前后台cookie的一致性 } else { var smartbiCookie alert("登录失败");= "<%=conn.getCookie()%>"; } </SCRIPT> </BODY> </HTML> |
注意:gif演示示例的源码请参考:使用浏览器端SDK单点登录到Smartbi.rar。
6、至此单点登录就完成了。但是如果Smartbi与第三方系统部署在不同的机器上,或者部署在同一机器不同的应用服务器域下,即出现跨域访问,则系统在访问过程中有可能出现各种奇怪问题。解决跨域访问,请参考:Smartbi与第三方系统集成跨域问题解决办法。script>
<%
}
%> |
注意 | ||
---|---|---|
| ||
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.如果 Smartbi 是集群部署模式,则不能采用本方法进行单点登录。 原因是ClientConnector对象是在jsp页面的java代码块中初始化的,其发起对象是第三方系统服务器,而集成资源是浏览器发起的,浏览器在使用该cookie时,不能保证跟服务器一样访问到同一个节点,在没有访问到同一个节点时,其cookie是无效的。 |