我有一个Webview的实现,其中我正在使用API loadUrl(url)加载URL。服务器进行身份验证检查,因此服务器发送401作为响应,并由 onReceivedHttpAuthRequest(WebView视图,HttpAuthHandler处理程序,字符串主机,字符串领域)处理。
WebView正在使用第一个401响应的正确实现来响应。在此响应之后,WebView将存储一个身份验证令牌,该令牌将用于后续请求。
有什么方法可以使已保存的令牌无效?
答案 0 :(得分:0)
我找到了一种方法,每次loadUrl尝试连接到服务器时,都会对用户名/密码对进行身份验证。
您应该使用loadUrl(String url, Map<String, String> additionalHttpHeaders)
。此方法接受一个URL和要与相应URL一起发送的AdditionalHttpHeaders。
例如,出于基本身份验证的目的,WebView可以使用以下步骤提交授权标头:
username:password
。result of step 2
的映射中添加键/值对。我正在添加以下代码,以供其他开发人员了解我的解决方案:
@Override
protected void onResume() {
super.onResume();
final WebView webView = findViewById(R.id.webview);
webView.setWebViewClient(new WebViewClient());
doWebSettings(webView);
webView.loadUrl(**url you want to load**, getBasicHeader());
}
private void doWebSettings(WebView webView) {
***These are example WebSettings**
final WebSettings webSettings = webView.getSettings();
webSettings.setAllowFileAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
}
private Map getBasicHeader() {
Map<String, String> additionalHeader = new HashMap();
additionalHeader.put("Authorization", "Basic "+ getEncodedString());
return additionalHeader;
}
private String getEncodedString(String username, String password) {
final String userpass = username+":"+password;
return Base64.encodeToString(userpass.getBytes(),
Base64.DEFAULT);
}
此解决方案将确保每次加载url时,服务器都会检查Additional标头进行身份验证。因此,WebView将不会发送以前的身份验证令牌。如果提供的用户名/密码对不正确,则将调用HttpAuthHandler#proceed,并且将调用默认行为来取消请求。