Android - 通过继承实现安全性

时间:2011-03-09 18:35:24

标签: android security android-activity

我想将常见的安全检查扩展到我的应用程序的几乎每个视图。要做到这一点,我已经完成了这个课程

public class ProtectedActivity extends ActivityBase {
    boolean isAuthenticated = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Thread validationThread = new Thread()
        {
            @Override
            public void run() 
            {
                try
                {
                    isAuthenticated = UserService.validateToken();
                }
                catch (FTNIServiceException e)
                {
                    //eat it
                }
                finally 
                {
                    if (!isAuthenticated)
                    {
                        startActivity(new Intent(ProtectedActivity.this, SignInActivity.class));
                        finish();
                    }
                }
            }
        };

        validationThread.start();
    }
}

逻辑很简单。根据我的restful api验证用户以确保他们已登录。如果不是,请将其显示在登录页面。

这非常有用,因为要添加安全检查,我需要做的就是继承我的ProtectedActivity

public class MainMenuActivity extends ProtectedActivity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }
}

但问题是,我定期收到View not attached to window manager个错误。我明白为什么会这样。我在父类中开始了一个新的意图,并且孩子继续存在。即使新的意图已经开始,也试图改变它的视图。处理此问题的更好方法是,如果用户未经过身份验证(例如他们的会话在服务器端到期),则在将用户发送到登录屏幕时不会出错?

1 个答案:

答案 0 :(得分:1)

你不是Thread。使用AsyncTask代替哪些应正确处理对Windows的引用。

另外,我会将此更改为其他实现。为什么不使用手机上的“首选项”存储来存储某种令牌。如果令牌无效,则请求新令牌以及您当前正在执行的所有操作。这种方式更好,因为您不希望每次都请求REST调用。

我想象这样的事情(伪代码)

  1. 检查首选项
  2. 中是否存在凭证凭据
  3. 如果(有效)不执行任何操作
  4. 其他使用 AsyncTask 并弹出加载程序界面“等待...”