# E10集成登录ecode开发方案

来源快照：`result_data_new_260518.json`

- 来源 ID：`1215193441082482724`
- 模块：集成中心
- 目录：集成登录 - 无侵入开发方案
- space ID：`1158011075224911873`
- 原文链接：未提供
- 产品基线：未提供

## 正文

* * *

 

# 一、概述

本文档介绍E10通过ecode-gradle项目二开自定义接口单点登录第三方系统的示例。

 

## 1.1 集成登录单点ecode二开方案说明

E10集成登录自定义单点实现类原二开方案由于需要将二开jar包打到E10标准集成登录服务的依赖上，侵入性较强，不符合二开开发规范，现在新增加集成登录ecocde接口二开方案。

此方案包含两部分开发

1）

前端二开ecode地址：

前端二开ecode的地址作用是，接收集成登录后端二开ecode接口返回的最终单点参数和单点地址，完成重定向单点登录跳转到第三方服务地址上，同时需要接收动态传递给前端ecode接口的单点参数，并将动态参数转发请求到后端ecode接口上。

2）

后端二开ecode接口地址:

后端二开ecode接口的地址作用是，直接在后端ecode接口逻辑中，实现构造第三方系统所需要的单点登录参数，和单点登录地址，并返回给前端ecode二开地址，由前端ecode二开地址完整最终的单点登录跳转。

 

**当然如果需要借助标准集成登录的能力，可以在开发完ecode前后端接口地址后，直接在标准的集成登录配置中，新建通用配置，然后单点登录地址(外网地址)配置成该开发的前端ecode地址，然后使用访问标准的集成登录配置的单点登录地址来单点第三方。**

 

## 1.2 集成登录ecode二开方案时序图

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193561275506688&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

# 二、ecode本地开发环境搭建

E10，ecode后端自定义接口，本地二开项目的搭建，这里可以使用提供的单点登录二开项目模板文件作为二开的项目来进行开发，二开项目文件如下：

## 2.1 项目模板下载

首先是，下载上述提供的二开项目模板，解压到本地目录

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193556986265607&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

 

然后使用idea打开该模板项目

(需要注意的是，该模板项目，idea需要装有gradle插件，没有gradle插件，后面开发完成是无法将项目打包成jar包的，如果idea没有gradle插件，请自行在idea-设置-插件里进行提前安装)

 

## **2.2 项目结构设置**

项目打开后，对项目结构进行设置，如下图

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193561172180998&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

 

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193561172181001&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

设置JDK为java1.8

 

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193552727515140&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

设置源码路径和测试文件夹路径

 

## 2.3 项目依赖设置

引入E10环境jar包依赖:

 

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193552548691978&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

设置项目下的secDevLib文件夹为项目的jar来源库。然后去到二开服务的weaver-secondev-service/webapps/ROOT/WEB-INF/lib，将整个文件夹的jar包文件，打包导入secDevLib文件夹内

 

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193565559422977&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193552571064321&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

这样自定义集成登录的本地二开项目就算搭建完成了，等待项目初始化完成后，即可开始开发自定义集成登录接口。

# 三、E10自定义集成登录接口开发示例

 

上面搭建好E10自定义单点登录二开的本地开发环境，就可以开始开发自定义集成单点登录自定义接口了。

## 3.1创建包路径及单点类

首先，在项目src/main/java/下，新建对应的开发目录和自定义接口类，可根据下面压缩包中的demo来开发

## **3.2自定义接口方法作用**

 

1、

单点登录方法loginSingle() ：

接收前端传递的动态单点参数，构造最终单点参数及单点地址并返回给前端ecode地址；

默认路由:/api/secondev/intlogin/sso/login(可根据自定义调整,ecode前端接口必须同步调整请求后端ecode接口地址)

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193552548691984&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

 

2、

单点登录配置属性项

查看SecondSsoConfig该类，可参考示例自定义需要用到的配置项

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193561362325511&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D) 

 

 

## 3.3自定义接口-单点登录第三方系统案例

 

## 3.4 制作jar包

 

最后，开发完成后，将开发项目打成jar包

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193552709115905&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

# 四、部署jar包

## 4.1  部署jar包

主团队管理员访问/ecode/monitor/loom/deploy/jar，服务节点选择二开服务weaver-secondev-service，检测服务状态

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193548343205902&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

点击上传，选择刚才本地build好的jar包

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193556970528780&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

1101基线及以上，且运维平台版本V5.0.9.920241128-RC及以上，增加二开jar包上传校验功能 可参考相关文档：[二开jar包上传校验功能文档](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/f37c9e49-e4d7-4db0-a671-a9cae8d1db70)

上传jar包后进入运维平台重启二开服务服务

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193565531463689&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

五、

# 前端中转页二开

前端中转页通过ecode二开。您可以导入前端二开示例包，并在其基础上开发。

 

## 5.1前端二开示例包导入

1、进入E10 ecode，访问路径为oa域名 \+ /ecode/project

2、新建项目，输入名称（名称无要求。如果已经存在项目，可以忽略这一步）

3、导入二开包

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193565562085377&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

4、发布二开包

使用**主租户** 账号，发布为公共应用

![](https://weapp.eteams.cn/papi/file/preview?fileId=1215193556970528768&type=redirect&customParam=%7B%22isExtDist%22%3Atrue%2C%22distributeId%22%3A%22%22%2C%22externalId%22%3A%22%22%2C%22appId%22%3A%22%22%7D)

## 5.2 二开包开发说明

中转页二开包发布后，访问 E10域名 \+ /sp/custom/loginSingle，即可看到loading效果。

 

1、

功能地址/sp/custom/loginSingle

// pc: /sp/custom/loginSingle

// mobile: /mobile/custom/loginSingle

入参：基于后端逻辑所需参数传入

 

2、

调用后端接口，获取三方系统地址和参数

 

核心实现在singleLogin方法中。

 

    // 需二开的方法，在次调用后端接口，传递参数

    const singleLogin = () => {

 

        // 如果需要调用接口/sdk 等，请参照三方服务文档对接

        // todo 调用三方sdk（如果三方服务不需要，请忽略该步骤）

        // 把参数传递给后端二开接口

        return new Promise(async (rs, rj) => {

            const data = await request({

                method: 'get',

                url: '/api/secondev/intlogin/sso/login',

                params: {

                    ...urlParams

                }

            })

            rs(!!data.data) // 返回布尔值，根据二开接口调整

        })

    }

 

 

[_Ecode_ _开发文档参考_](https://www.e-cology.com.cn/ecode/playground/doc/share/view/916733818655342593#e10%E5%AE%9A%E5%88%B6%E5%BC%80%E5%8F%91%E8%83%8C%E6%99%AF%E5%92%8C%E7%9B%AE%E6%A0%87)

 

前端二开包可下载下面压缩包查看
