概述

SaCa DataViz 内置了与 SaCa IAM 进行集成,集成后可通过 IAM 单点登录后访问 SaCa DataViz。DataVIz中可获得 IAM 中的用户、组织及角色等信息。集成在IAM部署成功后进行,整个过程通过修改配置文件的方式完成。

集成

SaCa DataViz 与 SaCa IAM 的集成方式和一般SaCa DataViz CAS 的集成方式没有本质的不同,集成包含后端登录、用户组织角色集成及前端配置三部分。

后端登录

  • 修改 /WEB-INF/web.xml,添加如下内容
<listener>
    <listener-class>
        org.jasig.cas.client.session.SingleSignOutHttpSessionListener
    </listener-class>
</listener>
  • 修改 applicationContext-security.xml

    该文件位于 WEB-INF/conf/spring/applicationContext-security.xml,包含了全部Spring Security登录验证等相关内容的配置。

    删除以下相关内容:

    • <http use-expressions="true" entry-point-ref="authenticationEntryPoint"> … </http>
    • <beans:bean id="formLoginFilter" class=…> … </beans:bean>
    • <beans:bean id="sessionManagementFilter" class=…> … </beans:bean>
    • <beans:bean id="invalidSessionStrategy" class=…> … </beans:bean>
    • <beans:bean id="logoutSuccessHandler" class=…> … </beans:bean>
    • <beans:bean id="authenticationEntryPoint" class=…> … </beans:bean>
    • <custom-filter position="SESSION_MANAGEMENT_FILTER" ref="sessionManagementFilter"></custom-filter>

    增加以下内容:

<beans:bean id="casPropertyConfigurer"     
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <beans:property name="ignoreUnresolvablePlaceholders" value="true" />
        <beans:property name="locations">
            <beans:list>
                <beans:value>WEB-INF/conf/cas.properties</beans:value>
            </beans:list>
        </beans:property>
</beans:bean>

<http use-expressions="true" entry-point-ref="authenticationEntryPoint" create-session="ifRequired">
        <!-- 禁用CSRF Protection,否则无法执行POST请求,会报403错误 -->
        <csrf disabled="true" />
        <!-- 对所有资源,都必须要有USER角色 -->
        <intercept-url pattern="/**" access="hasRole('USER') and @menuSecurity.check(authentication, request)" />
        <!-- 退出配置,如需删除cookie可添加:delete-cookies="JSESSIONID"-->
        <logout logout-success-url="/cas-logout.jsp"/>
        <custom-filter after="FORM_LOGIN_FILTER" ref="internalLoginFilter" />
        <custom-filter position="CAS_FILTER" ref="casFilter" />
        <custom-filter ref="requestSingleLogoutFilter" before="LOGOUT_FILTER"/>
        <custom-filter ref="singleLogoutFilter" before="CAS_FILTER"/>
        <access-denied-handler ref="accessDeniedHandler"></access-denied-handler>
</http>

<beans:bean id="casInfos" class="com.neusoft.saca.dataviz.authentication.springsecurity.cas.RequestAwareCasInfos">
    <beans:property name="defaultCas">
        <beans:bean class="com.neusoft.saca.dataviz.authentication.springsecurity.cas.CasInfo">
            <beans:property name="serviceProperties">
                <beans:bean class="org.springframework.security.cas.ServiceProperties">
                    <beans:property name="service" value="${sso.cas.localServer}${sso.cas.localServicePath}" />
                    <beans:property name="sendRenew" value="false" />
                </beans:bean>
            </beans:property>
            <beans:property name="loginTarget" value="${sso.cas.defaultTargetRedirect}" />
            <beans:property name="logoutTarget" value="${sso.cas.casServer}/logout?service=${sso.cas.localServer}" />
            <beans:property name="casLogin" value="${sso.cas.casServer}/login" />
            <beans:property name="casAuthn" value="${sso.cas.casServerLocal}" />
        </beans:bean>
    </beans:property>
</beans:bean>

<beans:bean id="casConfiguration" class="com.neusoft.saca.dataviz.authentication.springsecurity.cas.CasConfiguration">
    <beans:constructor-arg ref="casInfos" />
    <beans:property name="authenticationManagerRef" value="authenticationManager" />
    <beans:property name="userDetailsService">
      <beans:bean class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
        <beans:constructor-arg> <!--Use default user details service for IAM-->
            <beans:bean class="com.neusoft.saca.dataviz.authentication.springsecurity.DefaultUserDetailService" />
        </beans:constructor-arg>
      </beans:bean>
    </beans:property>
</beans:bean>

<beans:alias name="casEntryPoint" alias="authenticationEntryPoint" />

查找 <authentication-manager alias="authenticationManager">标签,将以下内容添加到该标签内:

    <authentication-provider ref="casAuthenticationProvider"/>

如DataViz版本包含了报表功能,查找 <http pattern="(?x: /Report-PreviewAction\.do | /Report-.*\.do | /unieap/pages/report/.* | /components/widget/.*)(?:\?.+)?" 部分,在标签内添加以下内容:

    <intercept-url pattern="/**" access="hasRole('USER')"/>
    <logout logout-success-url="/cas-logout.jsp"/>
    <custom-filter position="CAS_FILTER" ref="casFilter"/>
    <custom-filter ref="requestSingleLogoutFilter" before="LOGOUT_FILTER"/>
    <custom-filter ref="singleLogoutFilter" before="CAS_FILTER"/>
  • 添加cas.properties
    于 WEB-INF/conf 下,添加 cas.properties 文件。参考以下内容。
# cas 服务访问地址
sso.cas.casServer=https://my-cas-server.org:8443/cas

# cas 服务内部地址,用于内部验证通信,当仅在内网使用或没有内外网隔离时可与外部访问地址相同
sso.cas.casServerLocal=https://my-cas-server.org:8443/cas

# DataViz 后台应用访问地址
sso.cas.localServer=http://my-dataviz-backend.org:8080/dataviz-service

# DataViz 登录地址,不用修改
sso.cas.localServicePath=/login/cas

# DataViz 登出地址,不用修改
sso.cas.localLogoutPath=/logout/cas

# DataViz 前台访问地址
sso.cas.defaultTargetRedirect=http://my-dataviz-frontend.org:8080/dataviz/src/index.html

用户组织角色集成

说明

SaCa DataViz 内置了与SaCa IAM 用户组织角色的集成。集成后 SaCa DataViz 中的用户、组织、角色信息可以从获 IAM 中获取(对应IAM中用户、组织和业务角色),但不能在DataViz中对其进行任何修改。

DataViz中的管理员对应为 IAM 管理角色中的超级管理员,且不存在组织管理员。

由于 SaCa DataViz 不存在 IAM 中的维度的概念,DataViz 集成的组织关系默认会使用默认维度。如需要使用特定的维度,需要确定要使用的维度,再将其名称配置在DataViz中。

配置修改

  • 修改 applicationContext.xml

    查找并删除 userManager、roleManager、orgManager 三个bean的配置

    添加如下配置:

      <bean id="iamDataSource" class="org.apache.commons.dbcp2.BasicDataSource"
          destroy-method="close">
          <property name="driverClassName">
              <value>${iam.datasource.driverClass}</value>
          </property>
          <property name="url">
              <value>${iam.datasource.jdbcUrl}</value>
          </property>
          <property name="username">
              <value>${iam.datasource.user}</value>
          </property>
          <property name="password">
              <value>${iam.datasource.password}</value>
          </property>
          <property name="initialSize">
              <value>${iam.datasource.initialSize}</value>
          </property>
          <property name="maxTotal">
              <value>${iam.datasource.maxActive}</value>
          </property>
          <property name="maxIdle">
              <value>${iam.datasource.maxIdle}</value>
          </property>
          <property name="maxWaitMillis">
              <value>${iam.datasource.maxWait}</value>
          </property>
          <property name="validationQuery">
              <value>${iam.datasource.validationQuery}</value>
          </property>
      </bean>
    
      <bean id="iamManagers" class="com.neusoft.saca.dataviz.intg.iam.manager.IAMManagerFactory">
          <constructor-arg index="0" ref="iamDataSource" />
      </bean>
    

    如需要使用特定维度,可在 iamManagers 中添加如下property:

        <property name="dimensionName" value="维度名称1" />
    
  • 修改 datasource.properties

    参考已有的 DataViz 支撑库配置方式,将 IAM 数据库配置使用以下名称追加到数据源配置中。

    iam.datasource.driverClass=
    iam.datasource.jdbcUrl=
    iam.datasource.user=
    iam.datasource.password=
    iam.datasource.initialSize=2
    iam.datasource.maxActive=10
    iam.datasource.maxIdle=2
    iam.datasource.maxWait=2000
    iam.datasource.validationQuery=
    

前端配置

修改前台 /common/config.js 文件,修改以下变量值:

//cas集成配置
window.casConfig = {
  isEnable: true, //是否使用cas登录
  cas_server: "https://my-cas-server.org:8443/cas/login"//cas服务登录地址
};

results matching ""

    No results matching ""

    results matching ""

      No results matching ""