页面树结构
转至元数据结尾
转至元数据起始

正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史

« 前一个 版本 12 下一个 »

       Smartbi 与第三方系统相互集成过程中,通常需要由第三方系统接管某些 Smartbi 的功能,比如用户的登录验证需要由第三方统一认证平台完成、需要将 Smartbi 的资源同步到第三方系统、由第三方系统进行资源权限以及操作权限的验证等。上述需求,将通过如下方法实现。

接管的方式

       第三方系统接管 Smartbi 的功能,实现方式是相同的,都是由第三方系统开发相关 Java 类实现 Smartbi 指定的接口,然后在 Smartbi 中进行配置使用该 Java 类。Smartbi 会在相关的扩展点处调用第三方 Java 类,从而达到让第三方系统接管相关功能的目的。对于每一种功能接管,具体操作步骤如下。

  1. 参考“插件开发框架”,开发一个项目扩展包。
  2. 在扩展包项目中新建一个Java类 com.mycomp.MyXxxClass,并且实现接口 smartbi.xxx.IXxxInterface。
  3. 在 Smartbi 中进行配置,使用前一步开发的类 com.mycomp.MyXxxClass。
  4. 参考“扩展包部署”文档,部署该项目扩展包。
  5. 此后 Smartbi 会在相关的扩展点处调用 com.mycomp.MyXxxClass类,从而让第三方系统接管相关功能。

同步Smartbi资源树信息到第三方系统中

说明

       如果在项目中使用第三方系统的权限验证,很可能也需要同步 Smartbi 资源树信息到第三方系统中以配合权限验证,即每当Smartbi中的资源树发生变化就通知第三方系统及时更新。

实现步骤

1、在扩展包中新建一个Java类com.func.takeover.catalogtree.TreeSyncDemo,并且实现接口smartbi.catalogtree.ICatalogTreeListener。

2、配置新建的Java类,方式有如下两种:

(1)在扩展包中新建Module类,具体请参考wiki文档:自定义Module 或者参考下面的示例扩展包。在Module类的active方法中使用该段代码((CatalogTreeModule)catalogTreeModule).addCatalogTreeListener(new TreeSyncDemo());配置。

(2)编辑 Smartbi 服务器配置文件smartbi-config.xml,如下图红色框所示。在已有节点catalogtree下面新增子节点catalog-tree-listener,其属性为TreeSyncDemo类的全名com.func.takeover.catalogtree.TreeSyncDemo。

3、gif演示示例的源码请参考:资源树同步.rar

 

同步操作日志信息到第三方系统中

说明

       如果在项目中要统一管理操作日志,有可能需要将 Smartbi 的操作日志按指定的形式输出到指定的地方。

实现步骤

1、在扩展包中新建一个Java类com.log.takeover.log.LogSyncDemo,并且实现接口 smartbi.repository.IOperationLogReceiver。

2、编辑Smartbi服务器配置文件smartbi-config.xml,如下图红色框所示。在已有节点smartbi下面新增子节点operationlog,接着在节点operationlog下新增子节点preserver-class,其属性值为 LogSyncDemo 类的全名 com.log.takeover.log.LogSyncDemo。

3、gif演示示例的源码请参考:操作日志重定向.rar

 

使用第三方系统的用户管理

       第三方系统的用户管理能够包含 Smartbi 用户管理中的所有语义(用户组、角色、用户及其相应关系等),并且资源权限也希望由第三方系统统一管理,则可以屏蔽 Smartbi 的用户管理模块而使用第三方系统的用户管理作为统一用户管理平台。以下将介绍如何在外部系统中调用 Smartbi 用户管理模块。

用户管理模块功能概述

       详情请参考wiki:用户管理 目录下的用户管理章节和权限管理章节。

 

集成Smartbi用户管理模块到第三方系统

  1. Smartbi 用户管理模块集成在Smartbi中,客户端通过IE访问,对用户、角色等进行管理。部署并启动Smartbi后,在第三方系统中通过本章后面的方法即可对用户管理模块进行访问。
  2. 在第三方系统程序中通过IFrame访问 http://server:port/smartbi/vision/index.jsp 页面,并传递用户名、密码等参数过去,即可实现将用户管理模块嵌入到第三方系统中。
  3. 环境要求:
    1. 软件要求:JDK 1.6 或以上,IE11;
    2. 支持的服务器类型有:Tomcat 5.5、Weblogic 9.*、WebSphere 6、Jboss 4.13 等。
    3. 支持的数据库类型有:MySQL、SQL Server、Oracle、DB2、HSQL 等。


集成用户属性

       用户属性集成有三种方式,第一种是在使用iframe集成Smartbi的用户管理模块,直接在iframe中管理用户属性,第二种是直接操作用户属性对应的数据库表,第三种是通过服务器端SDK API管理用户属性。

1、在集成的用户管理模块中增加用户扩展属性

       根据以上步骤使用iframe在第三方系统中集成了用户管理模块后,可以在第三方系统中增加用户扩展属性,具体步骤如下:

(1)在系统运维 > 系统选项 > 用户管理设置 > 用户扩展属性 > 设置中

(2)添加用户扩展属性

(3)清空缓存,重新进入用户管理,对任意一个用户进行设置,就可以看到刚刚添加的用户扩展属性

2、直接通过知识库以对用户扩展属性进行修改

       用户扩展属性,定义在知识库的 t_systemconfig 表中,在其中 c_key 为 USER_EXTEND_SETTING 的行中,通过 c_long 列,以JSON形式定义。可通过下面的语句查询到该行数据:

SELECT * FROM t_systemconfig where c_key = "USER_EXTEND_SETTING";

        如配置了前面的用户扩展属性后,查询结果可能为:

修改 c_long 下的JSON即可对用户扩展属性进行修改。

3、通过服务器端SDK API对用户扩展属性进行读取

1)读取用户扩展属性结构

通过 smartbi.sdk.service.systemconfig.SystemConfigService 可以对用户扩展属性的结构进行读取:

ClientConnector conn = new ClientConnector("http://localhost:18080/smartbi");
conn.open("admin", "manager");
SystemConfigService service = new SystemConfigService(conn);
SystemConfig config = service.getSystemConfig("USER_EXTEND_SETTING");
System.out.println(config);
conn.close();

结果形如:

key=USER_EXTEND_SETTING;value=;longValue=[{"name":"用户扩展属性1","alias":"","typeS":"文本框","valueLength":"100"}]

(2)修改、读取用户属性值

通过 smartbi.sdk.service.user.UserManagerService 可以对用户属性值进行读取、修改:

ClientConnector conn = new ClientConnector("http://localhost:18080/smartbi");
conn.open("admin", "admin");
UserManagerService service = new UserManagerService(conn);
service.updateUserAttribute("ADMIN", "用户扩展属性1", "ExampleValue", "");        // 修改用户属性
IExtensionAttribute attr = service.getUserAttribute("ADMIN", "用户扩展属性1");    // 读取用户属性
System.out.println(attr.getValue());
conn.close();

同步Smartbi用户到第三方系统

实现步骤

  1. 用户同步:通过额外的系统实现用户信息定时同步,有两种方式:
    1. 方式一:使用存储过程或 ETL 定时将 Smartbi 中的用户等信息同步到外部系统中,Smartbi 的用户相关的表结构可参考用户集成文档的同步数据库相关用户表。
    2. 方式二:Smartbi用户管理模块提供事件通知机制,当新增或修改用户等信息时,可通知第三方系统同时更新信息。这个要求第三方系统提供有二次开发接口,实现步骤如下:
      1. 编写通知类***UserManagerNotifier.java,如ThirdPartUserManagerNotifier.java,实现 IUserManagerNotifier 接口,在该类中调用第三方系统的用户管理 API 方法,实现用户操作的同步。IUserManagerNotifier 的作用是当 Smartbi 的用户、组、角色变化时通知继承该接口的类进行相关操作。具体接口方法请参考用户管理变更通知类 API 文档。
      2. 重新启动服务器,即可生效。
  2. 用户验证:根据第三方系统的自身特征而定,可以使用其自身的用户验证,也可以通过Smartbi提供的二次开发接口使用 Smartbi 用户验证,可参考下一章节。


使用第三方系统的用户验证

说明:

       实际项目中往往存在多个系统需要统一登录认证,客户要求将某个系统作为统一登录认证平台,其余系统访问此系统来进行登录认证。这种情况下,不需要再使用 Smartbi 产品的用户管理模块来管理组和用户,但还需要保留通过角色来设置操作权限。Smartbi 用户管理模块为了应对这种需求,提供了一个可以根据需要扩充的用户验证方式,让项目能根据实际情况开发不同的需求。如下图所示,根据实际情况扩展开发实现接口类,即可使用其他系统用户验证平台。在 Smartbi 用户管理模块中添加自定义的身份验证类,并将第三方系统用户验证平台上的用户、组、角色等信息同步到 Smartbi 用户管理模块中,并实现登录。

实现步骤:

1.参考“插件开发框架”,开发一个项目扩展包;(也可以直接创建一个java项目)

2.在扩展包项目中新建一个Java类 com.mycomp.mypackage.MyAuth,并且实现接口 IAuthentication;可参考自定义登录验证扩展包: MyAuth.rar

3.参考“扩展包部署”文档,部署该项目扩展包;(如果步骤1中未使用扩展包方式,此时需要把实现的java类打成jar包,放在smartbi的war包lib目录下)

 4.打开smartbi的配置界面(http://localhost:38080/smartbi/vision/config),如下图红色框所示。修改加密类型为"CLASS";修改登录验证类为MyAuth类的全名com.mycomp.mypackage.MyAuth。

使用第三方系统的资源权限验证

说明:
       实际项目中往往存在多个系统需要统一权限认证,客户要求将某个系统作为统一认证平台, Smartbi 为了应对这种需求,提供了一个可以根据需要扩充的权限验证方式,让项目能根据实际情况开发不同的需求。

实现步骤:

  1. 参考“插件开发框架”,开发一个项目扩展包;
  2. 在扩展包项目中新建一个Java类 com.mycomp.mypackage.ResourcePermissionAuthDemo,并且实现接口 IResourcePermissionAuthorization
  3. 配置ResourcePermissionAuthDemo,两种方式如下:

    (1)示例扩展包中已配置好,新创建的扩展包可在扩展包用代码配置,如:在Module的active方法中使用此代码catalogTreeModule.getConfig().setResourcePermissionAuthorization("com.mycomp.mypackage.MyResourcePermissionAuth");配置

    (2)编辑 Smartbi 服务器配置文件smartbi-config.xml,如下图红色框所示。增加节点resource-permission-authorization,其属性为 ResourcePermissionAuthDemo 类的全名 com.mycomp.mypackage.ResourcePermissionAuthDemo;
  4. 参考“扩展包部署”文档,部署该项目扩展包,扩展包示例请参考 使用第三方系统的资源权限验证.rar
  5. 此后 Smartbi 系统中需要进行资源权限验证的时候,皆会跳转到 ResourcePermissionAuthDemo 类中由其完成资源权限验证。

注意事项:

      具体接口方法和示例类请参考 第三方资源权限验证API文档

使用第三方系统的操作权限验证

说明

      不使用 Smartbi 系统自身的操作权限验证逻辑,而是由第三方系统进行操作权限验证,给 Smartbi 返回一个用户能否访问指定操作的状态指示。

实现步骤

1. 在扩展包中新建一个Java类com.opauth.takeover.usermanager.FunctionAuthDemo,并且实现接口 smartbi.usermanager.IFunctionAuth。接口定义如下:

 

package com.mycomp.usermanager;
 
public class TestFunctionAuth implements IFunctionAuth {
    private static TestFunctionAuth auth = new TestFunctionAuth();
    public static TestFunctionAuth getInstance() {
        return auth;
    } 
    private TestFunctionAuth() {
        // TestFunctionAuth
    } 
    public boolean isFuncTypeAccessible(String userId, String functionCode) {
        // 在这里实现用户操作权限判断的逻辑,返回状态 true|false 指明用户能否访问指定操作
        return true;
    }
}

 

2. 修改扩展包文件 applicationContext.xml 增加如下内容。

 

<bean id="usermanager" class="smartbi.usermanager.UserManagerModule" factory-method="getInstance">
      <property name="functionAuth" ref="FunctionAuthDemo"/>
</bean>
<bean id="FunctionAuthDemo" class="com.opauth.takeover.usermanager.FunctionAuthDemo" factory-method="getInstance"></bean>

 

3.gif演示示例扩展包源码请参考:操作权限验证.rar

 

 

  • 无标签