第1章 背景

本手册主要介绍如何将SaCa DataViz中集成在企业号下,以让企业号中的用户在企业号中访问DataViz下已定义好的公共项目下的图表、图册。

第2章 方法

2.0 总体过程

  1. 配置DataViz 后台,使其可以在使用微信中企业号访问时,自动将企业号用户登录到DataViz。

  2. 在DataViz中设置让企业号用户能够访问到指定的图表或图册。设置的方式有两种:分享或看板。

  3. 使用微信企业号OAuth2.0获取Code回调地址链接指定ID的图册或图表,添加到企业号用户上。

2.1 前提条件及准备

  1. SaCa DataViz 必须已经正确部署,并可以通过公网地址通过页面登录访问。

  2. SaCa DataViz 已经配置为企业号中的应用,并拥有 corpId 及 secret。

2.2 配置

为了配合在企业号中使用,需要修改DataViz后台 /WEB-INF/conf/spring/applicationContext-security.xml 文件的配置。

  1. 找到 标签,修改其中内容,添加或启用为以下内容:

    <custom-filter before="FORM_LOGIN_FILTER" ref="wxqyLoginFilter"></custom-filter>
    
  2. 在该文件中添加或启用以下内容

    <beans:bean id="wxqyLoginFilter" class="com.neusoft.saca.dataviz.authentication.springsecurity.wxqy.WxqyAuthentationProcessingFilter">
           <beans:property name="authenticationManager" ref="authenticationManager" />
           <beans:property name="authenticationSuccessHandler"
               ref="authenticationResultHandler" />
           <beans:property name="authenticationFailureHandler"
               ref="authenticationResultHandler" />
    </beans:bean>
    
  3. 找到 ,其中添加或启用以下内容

    <authentication-provider ref="wxqyAuthenticationProvider" />
    
  4. 文件中添加或启用以下内容

<beans:bean id="wxqyAuthenticationProvider"  class="com.neusoft.saca.dataviz.authentication.springsecurity.wxqy.WxqyAuthenticationProvider">
        <beans:property name="corpInfoAccess" >
            <beans:bean id="corpInfo" class="com.neusoft.saca.dataviz.authentication.springsecurity.wxqy.CorpInfoAccess">
                <beans:constructor-arg name="corpId" value="corpId"/>
                <beans:constructor-arg name="secret" value="secret"/>
            </beans:bean>
        </beans:property>
        <beans:property name="userDetailsService" >
            <beans:bean id="wxqyUserDetailsService" class="com.neusoft.saca.dataviz.authentication.springsecurity.UserIdUserDetailsService">
            </beans:bean>
        </beans:property>
    </beans:bean>

其中,需要把 corpId 和 secret 分别替换为实际企业号中分配的 corpId 和 secret;wxqyUserDetailsService bean实现的Spring Security中的UserDetailsService接口,用于接收从微信企业号中得到的UserId,并返回一个对应DataViz中记录的用户ID的对象。(该用户ID可以后续在DataViz系统变量中取到)该类可以有不同的配置方式:

a. 使用上文中提到的UserIdUserDetailsService类,该类实现的验证用户是否在DataViz用户表中存在,并使用企业号的UserId直接映射到了DataViz中的用户Id。使用该类意味着企业号用户必须已经在DataViz用户表中存在,且ID对应相同。如果使用该配置,可能需要预先使用数据库工具,将用户数据导入到DataViz支撑库 dv_useraccount 表中,该表结构简单说明如下:

user_id: 用户ID,varchar,非空,主键

user_name: 用户名,用于显示,varchar

account_state: 用户状态,number 非空,默认1即可

account_role: 使用者角色。Number 非空,默认0即可

create_date: 创建时间,datetime 非空。

create_by: 创建人,varchar

last_login: 最近登录,datetime

user_data_analysis: number,非空,默认0即可。

b. 自定义的 UserDetailsService 实现类。使用自定的实现类,用户信息可以不存在于DataViz库中,这样可以保证登录时的用户与企业号中的用户账号保持实时同步。一个最简单的 UserDetailsService 实现类如下(除Spring Security依赖外,还需引入dataviz-common.jar做依赖):

import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

import com.neusoft.saca.dataviz.common.security.DefaultUser;

public class UserIdUserDetailsService implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        DefaultUser user = new DefaultUser(username, ""); // 普通用户权限

        return user;
    }
}

该实现类同样直接使用企业号返回的UserId作为DataViz用户ID。

注意: 1. 无论使用哪种方式,除非用户之前已经在DataViz中创建,否则由于缺少用户登录信息,这些用户是无法直接在页面上登录的。2. 如果使用第二种方法,并只使用系统变量控制用户权限,此处可以直接使用上文中的代码,在系统变量开发中,再将该ID转换为业务所需的用户身份,具体开发和使用可以参考《系统变量集成》。3. 如果使用第二种方法,并需要在DataViz中逐用户使用看板设置可见(可使用)内容(参见使用部分说明),那么需要参照《CAS单点登录集成》中第2.4节-登录用户集成中的内容进行几个接口的开发。(通常用户访问权限是在企业号中设置的,因此通常并不需要)

2.3 使用

2.3.1 DataViz端

配置修改完成后,需要重启DataViz后台服务,原页面可登录用户仍可正常登录。可以有提供给用户查看的方法:

  1. 使用分享

    建议使用的方法。直接分享图表图册,在不暴露分享链接的情况下,只有在企业号配置了的用户才能够查看。

  2. 使用用户看板

    如果需要很高的安全性或细粒度的访问权限划分,可以使用用户看板方式。首先,给用户查看的图表图册应在公共项目中,如果存在于个人项目中可以将其转入到公共项目下。然后使用管理员账号登录,在系统设置-权限设置中,使用看板设置,将图表图册分配到指定用户。(注意如果用户不存在于DataViz中需要开发,具体参见配置部分)

2.3.2 企业号端

企业号端需要为图表图册添加链接,需要使用企业号提供的OAuth2.0验证Code回调方式,其 redirect_uri 格式为:

  http://<dataviz服务地址>:<dataviz服务端口>/<dataviz应用名>/src/wxqyPlayCallback.html?id=<图表图册ID>&type=<类型>

其中,类型值 1 为图册,2为图表。 图表、图册ID的获取方法:Web登录后直接编辑图表/图册,地址栏中最后一个/ 后的UUID即为其ID。

results matching ""

    No results matching ""