Я нашел способ аутентифицировать пару имя пользователя / пароль каждый раз, когда loadUrl пытается подключиться к серверу.
Вы должны использовать loadUrl(String url, Map<String, String> additionalHttpHeaders)
.Этот метод принимает URL-адрес и дополнительныеHttpHeaders, которые вы хотите отправить с соответствующим URL-адресом.
Например, для целей базовой аутентификации WebView может отправить заголовок авторизации, используя следующие шаги:
- Создайте строку имени пользователя и пароля, разделенных двоеточием (:).Например,
username:password
. - Кодировать эту строку, используя Base64.
- Добавьте пару ключ / значение на карту, где ключ = "Авторизация" и значение =
result of step 2
. - Отправьте карту с URL-адресом, используя вышеупомянутый loadUrl метод.
Я добавляю следующий код для других разработчиков, чтобы понять мое решение:
@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 # continue и будет вызвано поведение по умолчанию, которое отменяет запрос.