文章目录
个人门户
个人门户,为用户提供集成办公环境
账户集成
门户统一管理平台各业务系统的账户数据
人事系统同步
- 当人事系统发生员工入职或离职时,门户系统自动完成本系统对应账户的创建或回收
- 当人事系统发生员工数据的更新时,门户系统自动完成本系统对应账户的员工数据更新
密码管理
- 所有用户可使用修改密码功能完成密码修改
- 所有用户可使用忘记密码功能完成密码重置
- 管理员可直接修改任意用户密码
业务系统同步
- 当账户信息或密码信息发生变化时,门户实时将变化后的数据同步至各业务系统,最终保证数据一致性
消息key | 描述 |
---|---|
fsl.portal.user | 账户消息key |
字段 | 描述 |
:— | :— |
sys_user表所有字段 |
钉钉集成
部门同步
- 当人事系统发生部门的新增、修改、删除时,门户实时将变化后的数据同步至钉钉
- 部门负责人属性字段也会同步至钉钉。钉钉只能将本部门的人员设置为部门负责人
员工同步
人员过滤
- 只有指定
人员类别
字段的类型枚举值,才会将此员工同步至钉钉
类型 | 枚举值 | 是否同步 |
---|---|---|
在职人员 | 合同工 | 是 |
在职人员 | 劳务工 | 是 |
在职人员 | 实习生 | 是 |
在职人员 | 外聘人员 | 是 |
在职人员 | 其它人员 | 否 |
在职人员 | 外包工 | 是 |
在职人员 | 外包工(短期) | 否 |
在职人员 | 外包工(岗位) | 是 |
在职人员 | 实习生(短期) | 是 |
在职人员 | 实习生(学徒制) | 否 |
在职人员 | 外部讲师 | 否 |
离职人员 | 全部 | 否 |
- 使用数据字典功能,将不需要同步的枚举值配置到
MDM_DD_EMP_FILTER
项中即可
正常流动
- 当人事系统发生员工的入职、离职、调岗、修改时,门户实时将变化后的数据同步至钉钉
门户员工信息 | 门户工作信息 | 钉钉用户 | 钉钉操作 |
---|---|---|---|
未(封存或离职) | 未(封存或离职) | 不存在 | 入职,为本组织添加钉钉用户 |
未(封存或离职) | 未(封存或离职) | 存在 | 调岗入,将钉钉用户添加至指定部门 |
未(封存或离职) | (封存或离职) | 任意 | 调岗出,将钉钉用户从指定部门删除。如删除后不属于任意一部门,则放置于根部门 |
(封存或离职) | 任意 | 任意 | 离职,为本组织删除钉钉用户 |
不存在 | 任意 | 任意 | 离职,为本组织删除钉钉用户 |
自主退出
- 当未离职员工主动在钉钉中退出所在组织时,门户系统会接收钉钉侧的事件回调通知,然后将员工重新纳入本组织指定部门。
- 同一个钉钉组织,一个回调事件只能有一个回调url,反复注册将覆盖上一次注册的url,并且url必须是公网可访问,无安全验证。
- 当功能首次发布到新组织后,需要手动调用注册接口,为本组织注册自主退出回调url.
组织名称 | 环境名称 | 注册地址 |
---|---|---|
风神测试 | DEV/SIT环境 | https://dingtest.fslgz.com/portal//dd/register/user_leave_org |
风神物流 | UAT/PROD环境 | https://app.fslgz.com/portal//dd/register/user_leave_org |
- 当因网络或系统异常导致钉钉回调失败的,钉钉会保存回调失败的通知数据,我们可以通过指定接口再次获取并处理数据。门户系统每次启动时,会自动检查并处理之前回调失败的数据,手工访问如下接口可立刻处理失败数据。
组织名称 | 环境名称 | 注册地址 |
---|---|---|
风神测试 | DEV/SIT环境 | https://dingtest.fslgz.com/portal//dd/register/user_leave_org/handle_failed |
风神物流 | UAT/PROD环境 | https://app.fslgz.com/portal//dd/register/user_leave_org/handle_failed |
手机号不合法
- 在数据字典中添加名为
部门文员
(DEPT_CLERK) 的职能主担 - 在职能主担中为各级部门设定各自的部门文员所对应的人员
- 当人员数据中的手机号不合法时,系统查找其主岗部门对应的部门文员,发出手机号不合法的钉钉提醒
- 如果本级部门未配置部门文员,则查找上级部门的部门文员,以此类推
- 如果找到顶级部门后,仍然无法找到部门文员的,系统报错
更新手机号
- 方案一:使用钉钉自带的变更手机号功能,完成手机号切换
- 方案二:在HR系统,直接更新员工手机号
- 如果更新后的手机号,手机号不合法,则走
手机号不合法
逻辑 - 如果更新后的手机号,与其它人手机号重复,则类似于
手机号不合法
的逻辑,发出手机号重复的钉钉提醒 - 系统删除原手机号对应的组织钉钉员工
- 系统创建新手机号对应的组织钉钉员工
- 如果更新后的手机号,手机号不合法,则走
下面对死锁场景作特殊的说明。
- A的真实手机号为1,B的真实手机号为2。
- Hr数据录入时,将A与B的手机号对调录入了,即A录入了2,B录入了1
- 系统已为A与B创建了错误的钉钉号。
恢复A与B正确钉钉号的流程如下
- 在HR上将A的手机号更新为1
- 在HR上将B的手机号更新为2。系统将删除B的错误钉钉号。
- 人工登录钉钉后台,手工删除A的钉钉号。系统自动重建A的正确的钉钉号
- 重新在HR上触发一次保存动作,系统将自动创建B的正确的钉钉号。
人员与部门关联
- 当一个人只存在一条有效的工作信息时,直接将本部门作为本员工的所属部门,将员工信息推送至钉钉(主岗部门)
- 当一个人存在多条有效的工作信息时
- 按序查找选择“派驻”、“挂职锻炼”、“借调”、“支援”的非主岗,作为本员工的所属部门,将员工信息推送至钉钉
- 如果以上都不存在,则将其主岗部门,作为本员工的所属部门,将员工信息推送至钉钉
单点服务
概述
CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议。CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。
从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。下图 是 CAS 最基本的协议过程:
SSO单点登录访问流程主要有以下步骤:
- 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
- 定向认证:SSO客户端会重定向用户请求到SSO服务器。
- 用户认证:用户身份认证。
- 发放票据:SSO服务器会产生一个随机的Service Ticket。
- 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
- 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。
参考
服务端布署4.2.X
采用CAS官方模板,Idea导入本工程.
基本配置
- 将
pom.xml
中的编译设置从1.7
统一修改为1.8
- 将
etc\log4j2.xml
复制到src\main\resources\log4j2.xml
多环境配置
- 创建
src\main\resources\profiles
目录,并创建dev
,sit
,uat
,pro
四个下级目录 - 将
etc\cas.properties
复制到src\main\resources\profiles\dev
目录下,并对属性作如下修改
locale.default=zh_CN
cas.logout.followServiceRedirects=true
- 在pom.xml中添加如下内容
<build>
<resources>
<resource>
<directory>src/main/resources/</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources/profiles/${profile.env}</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<profile.env>dev</profile.env>
</properties>
</profile>
<profile>
<id>sit</id>
<activation/>
<properties>
<profile.env>sit</profile.env>
</properties>
</profile>
<profile>
<id>uat</id>
<activation/>
<properties>
<profile.env>uat</profile.env>
</properties>
</profile>
<profile>
<id>pro</id>
<activation/>
<properties>
<profile.env>pro</profile.env>
</properties>
</profile>
</profiles>
- 将原有
src\main\webapp\WEB-INF\spring-configuration\propertyFileConfigurer.xml
作如下修改
<util:properties id="casProperties" location="classpath:cas.properties" />
Http配置
将target\war\work\org.jasig.cas\cas-server-webapp\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json
复制到src\main\resources\services\HTTPSandIMAPS-10000001.json
。修改serviceId属性,添加http。修改后属性如下
{
"serviceId": "|(https|http|imaps)://.*"
}
将target\cas\WEB-INF\view\jsp\default\ui\casLoginView.jsp
复制到src\main\webapp\WEB-INF\view\jsp\default\ui\casLoginView.jsp
,注释http警告
<!-- <c:if test="${not pageContext.request.secure}">
<div id="msg" class="errors">
<h2><spring:message code="screen.nonsecure.title" /></h2>
<p><spring:message code="screen.nonsecure.message" /></p>
</div>
</c:if> -->
用户配置
在pom.xml文件中,添加如下依赖,实现对MySql数据库访问
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.driver.version}</version>
</dependency>
……
<mysql.driver.version>5.1.46</mysql.driver.version>
将target\war\work\org.jasig.cas\cas-server-webapp\WEB-INF\deployerConfigContext.xml
文件复制到src\main\webapp\WEB-INF\deployerConfigContext.xml
中,添加数据源定义
<alias name="dataSource" alias="queryDatabaseDataSource"/>
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="${database.driverClass}"
p:jdbcUrl="${database.url}"
p:user="${database.user}"
p:password="${database.password}"
p:initialPoolSize="${database.pool.initialPoolSize}"
p:minPoolSize="${database.pool.minSize}"
p:maxPoolSize="${database.pool.maxSize}"
p:maxIdleTimeExcessConnections="${database.pool.maxIdleTime}"
p:checkoutTimeout="${database.pool.maxWait}"
p:acquireIncrement="${database.pool.acquireIncrement}"
p:acquireRetryAttempts="${database.pool.acquireRetryAttempts}"
p:acquireRetryDelay<