2017-05-17 37 views
1

私は基本認証が必要なWebページを表示するためにアンドロイドwebviewを使用しています。私はユーザー名とパスワードを取り、Webページへのログインを成功させるコードを持っています。しかし、ユーザーが再びwebviewにアクセスしたときに、キャッシュからユーザー名とパスワードをクリアしたい。基本認証のユーザー名とパスワードを入力すると、キャッシュに保存され、自動的にログインするように見えます。キャッシュからHttp Basic Authユーザー名とパスワードをクリアする方法 - android webview

私は

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

を試してみましたが、私はまた、

webview.clearCache

、webview.clearFormDataを試してみましたが、しかし、動作するようには思えません。ユーザー名とパスワードを入力するプロンプトを表示せずに自動的にログインしました。

ここに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

関連する問題