从前端开发者看待用友建筑云移动端单点登录与报错原因

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whh181/article/details/79566472

本文对单点登录有一个初步介绍,重点叙述前端开发者使用单点登录可能遇到的问题,以及问题分析!
方案全部来源于用友建筑云,本文仅用于内部分享,所以不过多介绍方案实现。

单点登录

  • APP在打开应用时用当前登录用户身份向MA申请一个令牌token
  • MA判断权限并返回令牌
  • Web使用token和appid去移动平台进行验证,验证是否合法
  • MA验证Token,如果合法则返回第三方移动应用对应的用户信息

容易出现的问题

容易出现的问题及值得优化的事情

  1. 用户想要的应用没有显示在应用列表中?
    要确认:上架、授权;
    区分应用分类:应用中心,内置应用,静态资源;
    区分获取应用列表接口的多个接口。
    后期值得考虑本地排序和后端排序,以及最近访问记录等拓展应用中心能力。

  2. 调用交互方法时没反应没报错?
    yyplus:call undefined?检查yyplus引用路径,以及yyplus 入口js中的maurl定义路径是否正确。

  3. 用户点击应用时提示无权限?
    原生调用validata接口时auth参数为需要鉴权,所以需要在应用管理中给应用授权。
    因为迁移,这其中的授权会不会影响也是有可能的。

  4. 应用鉴权出错,以及返回信息错误?
    同上

  5. Url不正确,参数获取失败?
    IOS容易出现url不对,已经解决过,但是老的版本APP代码同步情况不明,url不对会导致getRequest方法出现混乱,在url中传参就会导致错误参数,错误数据。
    客户或者其他开发组的getRequest方法是否正确对于帮助其他人和我们联调也是值得注意的地方

  6. 校验失败?
    一般不容易出现校验失败,出现原因,现在极大可能就是APP迁移和应用迁移不同步。

  7. 返回信息取不到用户组织人员造成页面空白?
    页面空白无报错,很有可能是前端组装ext时没有取到相应信息return false了。
    另一个极大可能就是yyplus没有执行加载完毕调用了getCompany方法。

进阶说明

先来一个看图说话(test单个样例)
这里写图片描述
这里写图片描述
这里写图片描述

  • index.js加载时间几乎在3000ms
  • getWorkbenchCookie在100-200ms
  • yyplus安卓版下载资源异步还需要1000ms
  • checktoken需要1500ms

内部应用如何跳过验证阶段,加速打开应用(优化一秒)

内部应用是否可以跳过生成token阶段,加速打开应用(无数据至少也是1-2秒)

  • 方案一:正常情况下(应用中心入口,内置应用员工自助,openWebview)不进行鉴权以及validata验证;流程图简化为原生openwebview》》原生注入cookie》》轻应用通过cookie获取上下文(不需要调用getCompany方法)
    可能出现的问题:
  • 轻应用单点登录日志如何记录?
  • cookie对于内部应用是否足够安全?

    优化后流程图:
    这里写图片描述
    需要改造的点:

    • 原生
      1. 写入的cookie改为icop_context(由登录是得到,之后缓存到全局,不重新登录该值不变)
      2. 获取应用列表缓存单点登录类型
      3. 打开应用时需要判断单点登录类型,根据单点登录类型做不同操作
      4. 交互方法opewnwebview需要多加单点登录类型参数
  • web

    1. 修改authtoken
  • java

    1. 应用管理区分单点登录类型(token令牌-默认,cookie,直接登录)(应用列表接口有配置改为应用表取单点登录类型)
    2. 添加单独鉴权接口,原有的validata存储的token不变,由于第三方使用依然需要存储在数据库,checktoken时依然需要在数据库中校验
    3. 微信单点登录
    4. checktoken(新加一个内部用方法)改造成返回icop_context

交互插件内置的可行性(优化一秒)

交互插件内置方案一:探索Cordova前端使用,固定文件,开发社区一定提供了内置方案;
方案二:走已知方案,直接将源码打包进入原生;

webpack打包的优化(优化2秒)

生产环境去除source-map;
加入懒加载;常用的有 webpack 插件 bundle-loaderreact 自带的 react-loadable 决定使用bundle-loader
经过第一步发现性能的根源在于yylib-antd-mobile没有按需加载,导致js有2M,继续根据组件库的性能按需加载

猜你喜欢

转载自blog.csdn.net/whh181/article/details/79566472
今日推荐