我有一个webview的实现,我正在使用API loadUrl(url)加载一个url。服务器具有身份验证检查,因此服务器发送401作为响应,由onReceivedHttpAuthRequest(WebView视图,HttpAuthHandler处理程序,String主机,字符串领域)处理。
WebView正在响应第一个401响应的正确实现。在此响应之后,WebView会存储一个用于后续请求的身份验证令牌。
有没有办法使保存的令牌无效?
每次loadUrl尝试连接到服务器时,我都找到了一种验证用户名/密码对的方法。
你应该使用loadUrl(String url, Map<String, String> additionalHttpHeaders)
。此方法接受您要使用相应网址发送的网址和其他HttpHeader。
例如,出于基本身份验证的目的,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时,服务器都会检查附加标头以进行身份验证。因此,WebView不会发送以前经过身份验证的令牌。如果提供的用户名/密码对不正确,则将调用HttpAuthHandler#proceed并调用默认行为,即取消请求。