Android集中式登录架构设计思想

方案有两种,一种是hook到AMS拦截startActivity中的intent,在启动activity的时候判断是否登录,如果没有对intent做动态替换,另一种就是通过AOP实现方法添加判断登录代码片段。hook对系统有兼容性,需要考虑到各个版本的api是否改动,而AOP的实现方式与版本没有任何兼容性问题,所以最后采用AOP的方式去实现app集中式登录。

所有的登录请求都会回调到ILogin接口,这也意味着登录事件只有一个统一的入口,这也就是集中式登录架构的核心好处。

如果我们嫌弃在需要判断登录状态的按钮上加入@LoginFilter()注解麻烦,而是想实现启动一个Activity自动判断是否登录,如果没有登录就回调到ILogin接口,那么只需要创建一个LoginFilterActivity如下:

//直接过滤登陆,不需要加注解,则继承`LoginFilterActivity`
public class LoginFilterActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!LoginAssistant.getInstance().getILoginFilter().isLogin(getApplicationContext())) {
            Toast.makeText(this, "没有登录!", Toast.LENGTH_SHORT).show();
            startActivityForResult(new Intent(this, LoginActivity.class), 0);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (!LoginAssistant.getInstance().getILoginFilter().isLogin(getApplicationContext())) {
            Toast.makeText(this, "登录失败!", Toast.LENGTH_SHORT).show();
            finish();
        }
    }
}

然后我们让需要登录才能进入的Activity继承自LoginFilterActivity即可。假如UserActivity继承LoginFilterActivity,当用户没有登录的时候,启动UserActivity便会回调到ILogin接口,这就是集中式登录架构。

public class ExtendsLoginFilterActivity extends LoginFilterActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_extends_login_filter);
    }
}
上一篇 Android使用AOP做登录拦截
下一篇 Android Studio 3.x上使用Lombok
目录
文章列表
1 Redis 服务器命令
Redis 服务器命令
2
Hexo模板
Hexo模板
3
Lucene的学习第三篇 — 分词
Lucene的学习第三篇 — 分词
4
互联网产品的3种发布策略
互联网产品的3种发布策略
5
AWS Auto Scaling Group 操作
AWS Auto Scaling Group 操作
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。