Поскольку кажется, что WebView
не может обрабатывать Basic
аутентификацию при использовании HTTPS
, я начал задумываться о том, чтобы вручную установить заголовок Authorization
(содержащий закодированное имя пользователя / пароль).
Вот как я думаю, что это можно сделать:
import org.apache.commons.codec.binary.Base64;
// ...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.connwebview);
// Getting info from Intent extras
// Get it if it s different from null
Bundle extras = getIntent().getExtras();
mUsrName = extras != null ? extras.getString("username") : null;
mPassC = extras != null ? extras.getString("passcode") : null;
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
// mWebView.setHttpAuthUsernamePassword("myhost.com",
// "myrealm",
// mUsrName,
// mPassC);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler,
String host,
String realm){
handler.proceed(mUsrName, mPassC);
}
public void onReceivedSslError(WebView view,
SslErrorHandler handler,
SslError error) {
handler.proceed() ;
}
});
String up = mUserName +":" +mPassC;
String authEncoded = new String(Base64.encodeBase64(up.getBytes()));
String authHeader = "Basic " +authEncoded;
Map<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", authHeader);
mWebView.loadUrl("https://myhost.com/secured_area", headers);
}
Это использует метод WebView.loadUrl (String url, Map<String, String> additionalHttpHeaders)
, и для этого примера я использую Base64Encoder
из Apache Commons . Часть Base64Encoder довольно тривиальна, и если вы не хотите включать внешние библиотеки в ваше приложение (по какой-либо причине), вы всегда можете написать own ( reference ).
Также обратите внимание, что вышеупомянутый метод WebView.loadUrl (String url, Map<String, String> additionalHttpHeaders)
доступен только в API 8+. Для справки см. Также статью в Википедии о Basic Authentication (в которой обсуждаются заголовки и т. Д.).