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

1.说明

       调用Smartbi的 服务器端SDK 方法进行登录并生成登录Token,实现单点登录,效果如下。

(注:演示使用的是Google Chrome较低版本,旧版本跨域允许传递cookie,因此可以正常登录)

       

2.具体操作步骤

       1、Smartbi 服务器加载LoginToken插件包(点击此处下载),扩展包部署请参考:扩展包部署,并在第三方系统中编写Java代码,核心代码如下:

// 这个插件的用途是使得在URL中传递密码只能使用一次。
// 集成系统时,首先通过Smartbi的SDK获取用户的动态密码。(密码默认60秒内有效,可在系统选项——单点登录——单点登录超时设置(毫秒)修改密码有效时间)
  
// 获取动态密码的示例:
ClientConnector conn = new ClientConnector("http://localhost:8080/smartbi");
boolean open = conn.open("admin", "manager"); // 必须以拥有系统管理员角色的用户登录,其他用户登录调用接口获取的token是null
if(open){
    InvokeResult result = conn.remoteInvoke("LoginTokenModule", "generateLoginToken", new Object[]{"demo"}); // 用户名
    System.out.println(result.getResult());//result.getResult()就是demo用户的token
    conn.close();
}else{
    //admin用户登录失败
    System.out.println("登录失败");
}
  
// 得到密码后需要先单点登录:可以在第三方首页中添加一个隐藏的iframe,使用这样的链接打开Smartbi的首页:http://ip:port/smartbi/vision/index.jsp?user=demo&password=<上述得到的动态密码>,使得单点登录到smartbi系统。
后续在第三方系统中打开smartbi的资源即可直接打开对应URL,无需在URL中传递用户名和密码。

       2、加载这个插件包后,还需要修改 Smartbi config.jsp 配置界面上的“用户管理”段的信息。

             (1)将“加密类型”设置为:CLASS

             (2)将“登录验证类”设置为:smartbi.logintoken.LoginTokenAuthtication

       

       3、动态密码默认60秒有效,可以在【系统选项 > 单点登录 > 单点登录超时设置】中进行配置,单位为毫秒,超过此时间则密码失效。

       

       4、gif演示示例的源码请参考:使用LoginToken插件包登录.rar


注意:若登录不成功,请检查。

1、插件包已正常加载?

2、登录验证类填写正确,填写后是否重启了应用服务器?

3、Chromium 内核浏览器,如Google Chrome、Microsoft Edge新版本的浏览器,需要解决跨域问题,保持同一个域集成测试才能正常登录。

4、生成token的代码正确(必须要通过拥有系统管理员角色的用户来登录,然后再生成其他用户的登录token,不能给admin用户生成token并登录)。

5、并且此logintoken.ext还实现普通用户单独访问smartbi的时候使用用户原本的密码访问,集成的时候可以使用用户原本的密码也可以使用一次性密码,建议是集成的时候使用一次性密码集成访问。