概述
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服务登录地址
};