EAS820及低版本云之家扫码登陆二开实现方案
::: hljs-center
# EAS820及低版本云之家扫码登陆二开实现方案
:::
## 说明
文章中提供了一个云之家扫码登陆实现的一个总体方案,及实现方案中需要改造的关键点,参考本方案时可根据云之家扫描登录要求灵活实现。云之家扫码登录的使用方式请云之家官方文档,这里写的非常详细,文档地址:https://open.yunzhijia.com/opendocs/docs.html#/tutorial/index/qrcode-login
![image.webp](/download/0100d639908039ac424f9fb59e1ab12e6c38.webp)
## 实现方案流程总览
这里是方案总的流程交互图、方案实现说明中会把EAS关键点二开列出。界面样式及排版请按照实际情况自由发挥,方案中不作说明。
![image.webp](/download/01006d26cb302c134cefb9f137dba0ef46bd.webp)
## 方案实现说明
以下是结合实现方案流程进行分步说明
### 一、改造登录界面 展示二维码
#### 1、登录的文件位置如下:
登录界面:
...\eas\server\deploy\eas.ear\sso_web.war\login_withForm.jsp
登录界面对应的js:
...\eas\server\deploy\eas.ear\sso_web.war\common\js\login_withForm.js
#### 2、改造内容
1)、增加一个二维码div 用来扫描登录
2)、在右上角增加一个二维码图片按钮用来切换登录方式到二维码登录
具体界面css样式及相关图片二开自己根据客户实际要求设计开发。
![image.webp](/download/0100f89e2e36921a4b20a487b334fa97c0cc.webp)![image.webp](/download/0100590d8238f9ec4e1886ce8b4e446028b7.webp)
#### 3、界面的二维码获取:
1)在服务端加一个获取二维码的servlet的,例如名称:QrCodeLoginServlet
2)前端在login_withForm.js中调用QrCodeLoginServlet获取云之家二维码,二维码对应的token(云之家二维码接口会一起返回) 返回给前端 ,用于后面提交登录时后端识别登录用户身份
3)QrCodeLoginServlet中需要按照云之家获取二维码接口说明 调用云之家获取二维码并返回给login_withForm.jsp
4)二维码信息获取到后 需要存到缓存表中, 列如名称:T_QR_QrCodeOpenIdMap(具体表结构可灵活定义)
参考表结构:T_QR_QrCodeOpenIdMap(fid, fQrCodeUrl, fQrCodeToken, fQrcodeTicket, fExpireTime, fOpenId , fScanned)
### 二、轮询云之家是否扫描回调
1)在服务端加一个获取二维码的servlet的 , 列如名称:QrLoginPollingServlet
2)前端在login_withForm.js中设置定时轮询调用QrLoginPollingServlet获取扫码结果
3)用户扫描结果,待云之家回调,回调需要再定义个servlet,例如名称:YZJCallbackServlet用于接收云之家回调结果。
4)回调接收后将扫描结果更新对应的QrCodeOpenIdMap缓存表 ,另外需要获取用户的openID 并通过关联云之家同步表(T_pm_easxtusermap ) 查找到EAS的真实账户、所以扫码登陆之前确保EAS用户已同步云之家。
参考SQL如下:
SELECT umap.fusernumber userNumber FROM T_pm_easxtusermap umap inner join t_qr_QrCodeOpenIdMap qrcode on umap.fxtid = qrcode.fopenid where qrcode.fQrCodeToken = ?
并将EAS真实账号返回给前端。
5)前端轮询后端servlet(QrLoginPollingServlet)返回发现用户已扫码并在云之家登录了,则将返回的结果中的EAS用户名及token自动填写到用户名及密码框值中。
例如:
$("#username").val(userNumber);
$("#password").val($("#qrCodeToken").val());
并调用login_withForm.js 中login() 提交登录。
### 三、自动提交验证登录
轮询后端发现用户已用云之家扫码并登陆,则调用login_withForm.js 中login() 提交登录。
1)后端需要定义一个扫描提交登录的认证处理器:例如名称:QrCodeTokenAuthHandler并在com.kingdee.eas.cp.eip.sso.EasMultiAuthLoginModule#verifyUserAndPassword 中判断当前登录方式是扫码登录,则走 QrCodeTokenAuthHandler#authenticate 认证。
具体怎么加认证处理器认证可参考EasMultiAuthLoginModule#verifyUserAndPassword 已实现代码,里面很清晰。
2)扫描提交登录认证需要查询扫描缓存表T_QR_QrCodeOpenIdMap 确认用户是否真的扫描登录成功。 主要确认扫描字段是否是已扫描(回调时应更新),及token, username、以及是否扫描已过期fExpireTime等。
3)上述认证处理器加好后,只要处理器验证通过后 则系统会按照已有逻辑自动登录成功。
**注:上述servlet全在 ..\eas\server\deploy\eas.ear\sso_web.war\WEB-INF\web.xml定义映射即可。**
EAS820及低版本云之家扫码登陆二开实现方案
::: hljs-center# EAS820及低版本云之家扫码登陆二开实现方案:::## 说明文章中提供了一个云之家扫码登陆实现的一个总体方案,及实现方案...
点击下载文档
本文2024-09-16 22:09:26发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-46276.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章