Webview客户端在单击webView中的其他超链接/按钮时不会监听shouldOverrideUrlLoading方法

时间:2013-04-24 08:34:14

标签: android android-webview ntlm chilkat

我有一个拥有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()方法。

1 个答案:

答案 0 :(得分:1)

授权后,每个后续HTTP请求都应包含一个包含先前授权结果的Authorization标头。如果后续请求是使用Chilkat HTTP发送的,则该对象将自动发送此Authorization标头。但是,WebView并不了解它,并且它包含任何授权标头及其请求,因此您会收到“401 Unauthorized”错误。

一种解决方案是查看是否可以使用WebView进行NTLM授权。我假设你只使用Chilkat,因为这是不可能的。

另一种解决方案是使用Chilkat,但随后获取Authorization标头的值(来自Chilkat)并使用WebView显式设置此标头字段。我不太了解WebView知道这是否可行。要从Chilkat获取Authorization标头的值,可能需要一个新的Chilkat功能(我认为这可能很容易)。 (或者它已经可能,但是以一种令人费解的方式)