Android端实现单点登录的方法详解

Android端实现单点登录的方法详解,第1张

概述前言单点登录SSO(SingleSignOn)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如

前言

单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次 *** 作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效性,因此要点也就以下两个:

      存储信任

      验证信任

如果一个系统做到了开头所讲的效果,也就算单点登录,下面就来看看在AndroID端实现单点登录的方法

服务端

服务端需要集成Token,每次在app登录时为app分配新的token,如果在某次http请求中app传递token不是最新的,则视为需要重新登录(或者根据自己需要后台设定token有效时间,过期视为Token失效,需要重新登录).在token失效的情况下,返回约定好的code

AndroID端监听

App如何知道已经在其他设备登录了呢,一般可以有三种方式

1.API请求中后台返回特定code

这种是最常见的方式,缺点是需要下次API请求才知道被踢下线,可以在网络层实体模型的基类BaseModel中处理,对code进行判断

    switch (code) {    case 1:      break;    case 3://被踢下线      //Do Something      break;    }

2.推送

后台推送给app,从而app得知该账户在其他设备登录了,进而执行下线 *** 作,优点是可以及时响应

3.使用第三方的监听器

很多时候app会集成一些第三方的账户系统,例如在集成了环信的app中,每个用户对应一个环信的imUsername,环信自身有提供连接状态的接听,通过监听环信的用户状态,从而达到监听app自身用户系统的效果

    EMClIEnt.getInstance().addConnectionListener(this);

AndroID被踢下线后的 *** 作

不管是哪种监听方式,最后的 *** 作都是一样的,可以根据自己的需求进行对应的 *** 作.这里提供一种常规化的下线流程.

从栈顶取到当前的前台Activity,Dialog提示用户,点击后跳转登录页


首先,任意地方获取到前台Activity

public Activity getTasktop() {  return mActivitIEs.get(mActivitIEs.size() - 1);}

然后在主线程d出dialog

private voID onConnectionConflict() {//被踢下线处理  SPUtils.logout();  final Activity tasktop = ActivityManager.getInstance().getTasktop();  if (tasktop == null) return;  new Handler(Looper.getMainLooper()).post(new Runnable() {    @OverrIDe    public voID run() {      mddialogFactory.CreateMustOkDia(tasktop,"您的账号已在其他终端登录,请重新登录",new MDCallBack() {        @OverrIDe        public voID onMdCall(@NonNull MaterialDialog dialog,@NonNull DialogAction which) {          Intent intent = new Intent(tasktop,LoginActivity.class);          intent.putExtra(ConstantKey.MUST_LOGIN_KEY,true);          tasktop.startActivity(intent);        }      }).show();    }  });}

这里做一些说明

由于监听到被踢下线的环境不一定在主线程,所以需要切换到主线程进行d出Dilaog

 new Handler(Looper.getMainLooper()).post(Runnable r)

这里的dialog是强制的,取消不了(这里dialog是自定义的,用系统的也是可以的,这不是重点)

 builder.cancelable(false); builder.canceledOntouchOutsIDe(false);

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位AndroID开发者们能有所帮助,如果有疑问大家可以留言交流。

总结

以上是内存溢出为你收集整理的Android端实现单点登录的方法详解全部内容,希望文章能够帮你解决Android端实现单点登录的方法详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存