Android - безопасность через наследство - PullRequest
0 голосов
/ 09 марта 2011

Я хочу распространить общую проверку безопасности почти на каждый просмотр моего приложения.Для этого я сделал этот класс

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();
    }
}

Логика проста.Проверьте пользователя по моим успокоительным API, чтобы убедиться, что они вошли в систему. Если это не так, покажите его на странице входа.

Это прекрасно работает, потому что для добавления проверки безопасности все, что мне нужно сделатьнаследуется от моего ProtectedActivity.

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

    }
}

Проблема, однако, в том, что я периодически получаю View not attached to window manager ошибок.Я понимаю, почему это происходит.Я начинаю новое намерение в родительском классе, и ребенок продолжает жить.попытаться изменить его взгляд, даже если началось новое намерение.Как лучше справиться с этим, чтобы, если пользователь не прошел проверку подлинности (например, его сеанс истекает на стороне сервера), он не выдавал ошибку при отправке пользователя на экран входа?

1 Ответ

1 голос
/ 09 марта 2011

Не так ли Thread. Вместо этого используйте AsyncTask, который должен правильно обрабатывать ваши ссылки на окна.

На другой ноте, я бы изменил это на другую реализацию. Почему бы не использовать хранилище настроек на телефоне для хранения какого-то токена. Если токен недействителен, запросите новый токен и все, что вы делаете в данный момент. Этот способ лучше, потому что вы не хотите каждый раз запрашивать вызов REST.

Я представляю что-то вроде этого (псевдокод)

  1. Проверьте , существуют ли учетные данные в Предпочтении
  2. если (действительный) , то ничего не делать
  3. иначе используйте AsyncTask и откройте экран загрузчика "Ожидание ..."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...