【问题标题】:Android WebView clear Basic Authentication CredentialsAndroid WebView 清除基本身份验证凭据
【发布时间】:2013-03-19 11:17:08
【问题描述】:

我制作了一个使用基本身份验证向服务器进行身份验证的应用。但是我无法清除凭据,因此这意味着我有两个未解决的问题:

  • 用户必须退出程序才能注销
  • 如果用户输入的凭据有误,他们必须退出并重新进入程序

我自己尝试了许多不同的实现,并在本网站上推荐了许多。我在 freenode 上露营 #android-dev 无济于事。所以这是我最后的选择。

这是我的 WebView 示例代码(我取出了一些东西,但主要代码基本相同):

    wv = new WebView(getBaseContext());
    wv.setWebViewClient(new WebViewClient() {
        boolean error = false;
        int count = 0;
        int checked = 0;

        @Override
        public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
            count++;
            if (count >= 3) {
                Toast.makeText(getBaseContext(), "Login Failed. Please Try Again.", Toast.LENGTH_LONG).show();

            } else {
                handler.proceed(getUser(), getPass());
            }// end else
        }// end onReceivedHttpAuthRequest


        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {

        }// onPageStarted

        // on success switch activities
        @Override
        public void onPageFinished(WebView view, String url) {

            if (view.getTitle().equalsIgnoreCase("fooTitle")) {

                // switch activities
                Intent fooActivity = new Intent(getBaseContext(), fooActivity.class);
                startActivity(fooActivity);
            } else {
                //failed
            }// end else
        }// end onPageFinished
    });// end setWebViewCleint

    wv.getSettings().setJavaScriptEnabled(true);
    wv.loadUrl(url);

只有在我第一次运行它时它才会运行 onReceivedHttpAuthRequest。如果我注销并重新登录,它将使用以前的凭据运行 onPageStarted 然后 onPageFinished。因此,如果我注销并输入新用户,我将使用原始用户重新登录。或者,如果我输入了错误的用户名和密码,它只会挂在 OnPageStarted 上。我尝试过使用 onReceivedError 和 http 错误之一,但没有任何好处。

这是我尝试使用 logout() 方法和其他部分代码中的一些代码。我也尝试了许多不同的变体:

    wv.clearCache(true);
    wv.setHttpAuthUsernamePassword(host, realm, "","");
    clearCacheFolder(this.getCacheDir());
    clearCacheFolder(this.getExternalCacheDir());
    this.getBaseContext().deleteDatabase("webview.db");
    this.getBaseContext().deleteDatabase("webviewCache.db");
    WebViewDatabase.getInstance(getBaseContext()).clearHttpAuthUsernamePassword();
    WebViewDatabase.getInstance(getBaseContext()).clearUsernamePassword();
    WebViewDatabase.getInstance(getBaseContext()).clearFormData();
    WebStorage.getInstance().deleteAllData();
    wv.setHttpAuthUsernamePassword(host, realm,
    username, password);

ClearCacheFolder 指的是贴在这里的方法markjan:Android Webview - Completely Clear the Cache

【问题讨论】:

    标签: android caching webview basic-authentication webviewclient


    【解决方案1】:

    试试这个:

        CookieSyncManager.createInstance(this);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.removeAllCookie();
    

    我在 VKontakte 登录活动中使用它来清除 webview 中保存的用户名/密码。

    【讨论】:

    • 感谢您的建议,但基本身份验证不使用 cookie。不过我试过了。
    【解决方案2】:
    @Override
    public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
        count++;
        if (count >= 3) {
        handler.cancel();// after adding this line of code my
                         //problem is solved. Hope it will for you too.
    
        Toast.makeText(getBaseContext(), "Login Failed. Please Try Again.", Toast.LENGTH_LONG).show();
    
        } else {
            handler.proceed(getUser(), getPass());
            }// end else
        }
    

    【讨论】:

      猜你喜欢
      • 2012-09-03
      • 1970-01-01
      • 2011-11-12
      • 2017-11-11
      • 2012-08-30
      • 2020-12-03
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多