2017-05-17 52 views
1

我使用的是android webview來顯示需要基本身份驗證的網頁。我有代碼需要用戶名和密碼,並允許成功登錄到網頁。但是當用戶再次訪問webview時,我想清除緩存中的用戶名和密碼。看起來像一旦您輸入用戶名和密碼進行基本身份驗證,它會將其保存在緩存中並自動登錄。如何清除Http Basic Auth用戶名和密碼緩存 - android webview

我已經試過

WebViewDatabase webViewDB = WebViewDatabase.getInstance(getActivity()); 
    webViewDB.clearHttpAuthUsernamePassword(); 

我也試過webview.clearFormData,webview.clearCache

但它似乎並沒有工作。它在沒有提示輸入用戶名和密碼的情況下自動登錄。

這是我完整的webview片段代碼。

public class WebViewFragment extends Fragment { 
private static final String LOG_TAG = WebViewFragment.class.getName(); 
private ProgressBar progressBar; 
private View footerV; 
private String urlToLoad; 
private int footerVisibility; 
private int failureCount = 0; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.web_fragment, container, false); 
    try { 
     init(rootView); 
    } catch (Exception e) { 
     Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(getActivity())); 
    } 
    return rootView; 
} 

@Override 
public void onDestroyView() { 
    super.onDestroyView(); 
    if (footerV != null) footerV.setVisibility(footerVisibility); 
} 

private void init(View rootView) { 
    Bundle bundle = getArguments(); 
    ConstraintLayout navBarCL = (ConstraintLayout) rootView.findViewById(R.id.navBar); 
    progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar); 
    if (bundle.getBoolean(BundleConstants.WEB_HIDE_HEADER)) { 
     navBarCL.setVisibility(View.GONE); 
    } else { 
     navBarCL.setVisibility(View.VISIBLE); 

     ImageView backButtonIV = (ImageView) rootView.findViewById(R.id.backButtonImage); 
     backButtonIV.setOnClickListener(view -> navigateBack()); 

     String title = bundle.getString(BundleConstants.WEB_HEADER_TEXT); 
     TextView headerTextTV = (TextView) rootView.findViewById(R.id.headerText); 
     headerTextTV.setText(title); 
    } 

    WebView webView = (WebView) rootView.findViewById(R.id.webView); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
    webView.setWebViewClient(getClient()); 
    webView.setWebChromeClient(new WebChromeClient() { 
     @Override 
     public void onCloseWindow(WebView window) { 
      super.onCloseWindow(window); 
      navigateBack(); 
     } 
    }); 

    footerV = getActivity().findViewById(R.id.footer); 
    footerVisibility = footerV.getVisibility(); 
    if (bundle.getBoolean(BundleConstants.WEB_SHOW_FOOTER)) { 
     footerV.setVisibility(View.VISIBLE); 
    } else { 
     footerV.setVisibility(View.GONE); 
    } 

    urlToLoad = bundle.getString(BundleConstants.WEB_URL); 
    Log.d(LOG_TAG, "Opening url :" + urlToLoad); 
    webView.loadUrl(urlToLoad); 
} 

@NonNull 
private WebViewClient getClient() { 

    WebViewDatabase webViewDB = WebViewDatabase.getInstance(getActivity()); 
    webViewDB.clearHttpAuthUsernamePassword(); 
    return new WebViewClient() { 
     @Override 
     public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { 
      ++failureCount; 
      showProgressBar(); 
      LoginDialog loginDialog = new LoginDialog(getContext(), getFragment(), handler, failureCount); 
      loginDialog.show(); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      hideProgressBar(); 
     } 

    }; 

} 

public void hideProgressBar() { 
    if (progressBar != null) progressBar.setVisibility(View.GONE); 
} 

public void showProgressBar() { 
    if (progressBar != null) progressBar.setVisibility(View.VISIBLE); 
} 

private WebViewFragment getFragment() { 
    return this; 
} 

public String getUrlToLoad() { 
    return urlToLoad; 
} 

protected void navigateBack() { 
    footerV.setVisibility(footerVisibility); 
    getFragmentManager().popBackStack(); 
} 

} 

請提供一些建議。

回答

0

試試這個

WebView webView = (WebView) rootView.findViewById(R.id.webView); 
webView.clearCache(true); 
+0

這沒有奏效。 – Karu

相關問題