我有一个拥有ntlm身份验证的sharepoint站点。为了让我加载页面,我使用此功能对网站进行身份验证。
public String LoadUrlWithNTLM(String url){
CkHttp http = new CkHttp();
http.put_Login("username");
http.put_Password("password");
http.put_NtlmAuth(true);
http.put_SessionLogFilename("ntlmAuthLog.txt");
String source = http.quickGetStr(url);
return source;
}
并加载webview。
public void LoadWebView(String url, String source){
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadDataWithBaseURL(url, source, "text/html", "", "");
}
我在OnCreate()
中调用它source= LoadUrlWithNTLM(url);
LoadWebView(url,source);
然后我检查是否有点击此事件的网址事件
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url){
String toWebView = LoadUrlWithNTLM(url);
LoadWebView(url,source);
return false;
}
});
在某些时候,我可以通过使用NTLM身份验证进入Sharepoint站点进行管理,但是当我单击某个链接时,它只显示“401 UNAUTHORIZED”并且不在断点上调用shouldOverrideUrlLoading()方法。
答案 0 :(得分:1)
授权后,每个后续HTTP请求都应包含一个包含先前授权结果的Authorization标头。如果后续请求是使用Chilkat HTTP发送的,则该对象将自动发送此Authorization标头。但是,WebView并不了解它,并且它包含任何授权标头及其请求,因此您会收到“401 Unauthorized”错误。
一种解决方案是查看是否可以使用WebView进行NTLM授权。我假设你只使用Chilkat,因为这是不可能的。
另一种解决方案是使用Chilkat,但随后获取Authorization标头的值(来自Chilkat)并使用WebView显式设置此标头字段。我不太了解WebView知道这是否可行。要从Chilkat获取Authorization标头的值,可能需要一个新的Chilkat功能(我认为这可能很容易)。 (或者它已经可能,但是以一种令人费解的方式)