在系统集成中,用户为了统一门户,一般都会要求多个系统实现单点登录。
单点登录一般有几个步骤:
1、用户信息同步,用户信息同步有多种方式,可参考 与第三方系统用户集成
2、第三方系统通过连接等方式打开smartbi并传递用户名等信息,有多种方式,该文档详细说明。
3、smartbi实现第三方的登录验证方法,请参考 与第三方系统用户集成#与第三方系统用户集成-使用第三方系统的用户验证4、使用第三方系统的用户验证 示例文档有CAS单点登录、windows域登录验证。
可以通过以下四种方法之一,在第三方系统中单点登录到 Smartbi 系统。
方法一:Smartbi服务器加载LoginToken扩展包(点击此处下载),并在第三方系统中编写Java代码,调用Smartbi的服务器端SDK方法进行登录并生成登录Token,实现单点登录。
这个插件的用途是使得在URL中传递密码只能使用一次 集成系统首先通过Smartbi的SDK获取用户的动态密码密码60秒内有效 ** 可在LoginToken.ext\META-INF\aplicationContext.xml修改timeout属性: 获取动态密码的示例: ClientConnector conn = new ClientConnector("http://localhost:8080/smartbi"); conn.open("admin", "manager");//以管理员身份登录 InvokeResult result = conn.remoteInvoke("LoginTokenModule", "generateLoginToken", new Object[]{"demo"});//用户名 System.out.println(result.getResult()); conn.close(); 得到密码后可以通过openresource.jsp?user=demo&password=上述得到的动态密码打开Smartbi的资源 |
加载这个扩展包需要将Smartbi服务器的登录验证类设置为smartbi.logintoken.LoginTokenAuthtication
注:若登录不成功,请检查1、扩展包已正常加载?2、登录验证类填写正确?3、生成token的代码正确(通过管理员登录生成其他用户的登录token,不能给admin用户生成token并登录)。
<form method="POST" id="formLogin" onsubmit="go();return false"> <p>用户:<input type="text" name="user" size="20" value="admin"></p> <p>密码:<input type="text" name="password" size="20" value="manager"></p> <p>登录成功后的跳转地址:<input type="text" name="surl" size="20" value="manager"></p> <p>登录失败后的跳转地址:<input type="text" name="furl" size="20" value="manager"></p> <p><input type="submit" value="确定" name="B1"></p> </form> function go() { formLogin.action = "http://localhost:18080/smartbi/vision/index.jsp"; formLogin.user.value = "admin"; formLogin.password.value = "manager"; formLogin.surl.value = " "; // 登录成功后的跳转地址 formLogin.furl.value = " "; // 登录失败后的跳转地址 formLogin.submit(); return true; } |
前端登录后,需要有相应的注销代码
<form method="POST" id="formLogout" onsubmit="go();return false"> <p>注销成功后的跳转地址:<input type="text" name="surl" size="20" value="manager"></p> <p>注销失败后的跳转地址:<input type="text" name="furl" size="20" value="manager"></p> <p><input type="submit" value="确定" name="B1"></p> </form> function go() { formLogout.action = "http://localhost:18080/smartbi/vision/logout.jsp"; formLogout.surl.value = " "; // 注销成功后的跳转地址 为空时自动跳转到smartbi的index.jsp formLogout.furl.value = " "; // 注销失败后的跳转地址 为空时自动跳转到smartbi的index.jsp formLogout.submit(); return true; } |
1、参考开发接口中的服务端SDK方法 的使用步骤,把相关的 jar 包加载到您的 Java 项目的 classpath 中。
2、编写登录代码,调用 SDK 中的相应方法。
3、可以将得到的smartbiCookie 作为参数传入openresource.jsp等页面,必须转码后再传递,例如<a href="http://server:8080/smartbi/vision/openresource.jsp?resid=<资源ID>&smartbiCookie=<%=java.net.URLEncoder.encode(conn.getCookie(), "UTF-8")%>">。
<%@ page contentType="text/html; charset=GBK" import="java.util.*, smartbi.sdk.ClientConnector, smartbi.sdk.service.user.UserManagerService" %> <% request.setCharacterEncoding("GBK"); String user ="admin"; String password = "manager"; String smartbiURL = "http://localhost:18080/smartbi/vision/"; ClientConnector conn = new ClientConnector("http://localhost:18080/smartbi"); // 建立此连接时,就对smartbi进行了登录 boolean ret = conn.open(user, password); if (!ret) { %> <script> alert("登录失败!"); </script> <% } else { %> <script> alert("登录成功!"); // 获取smartbi的cookie,在集成页面需要传递smartbiCookie值,以保证前后台cookie的一致性 var smartbiCookie = "<%=conn.getCookie()%>"; </script> <% } %> |