2

我有一个共享点站点,它具有 ntlm 身份验证。为了让我加载页面,我使用它对网站进行身份验证。

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);

然后我检查是否有一个 url 事件点击这个

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() 方法。

4

1 回答 1

1

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

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

另一种解决方案是像您一样使用 Chilkat,然后获取 Authorization 标头的值(来自 Chilkat)并使用 WebView 显式设置此标头字段。我对 WebView 知之甚少,不知道这是否可能。要从 Chilkat 获取 Authorization 标头的值可能需要一个新的 Chilkat 功能(我认为这可能很容易做到)。(或者已经有可能,但是以一种复杂的方式)

于 2013-04-25T13:26:05.843 回答