EAS820及低版本云之家扫码登陆二开实现方案

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

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及低版本云之家扫码登陆二开实现方案:::## 说明文章中提供了一个云之家扫码登陆实现的一个总体方案,及实现方案...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息