Zulfi,
Only Basic authentication scheme can be used preemptively. If you want to eliminate 
the authentication overhead associated with Digest or NTLM schemes you have to ensure 
that the HTTP server keeps connections alive when possible.

Please get logging to work. That should not be too difficult. Please note that 
application servers and servlet engines usually redirect standard output and standard 
error. If you are unable to figure out what is going you might want to use Log4j 
toolkit that allows greater control over logging (for instance, you can specify a 
separate log file for a specific category of events). We will not be able to help you 
unless we can see the logs. 

Oleg

-----Original Message-----
From: Zulfi Umrani [mailto:[EMAIL PROTECTED]
Sent: Tuesday, June 10, 2003 16:27
To: [EMAIL PROTECTED]
Subject: RE: preemptive


By setting realm as null, the pre-emptive authentication worked! But, it
sends a Basic Authorization header even if the URL is protected by
Digest! For Digest it is still making 2 trips in order to authenticate.
Which is fine for the first request, but it repeats the same thing for
the second request as well. Is there a way to tell the state, method or
client what kind of scheme is desired for pre-emptive authentication.
Sorry, no logs here as log did not work.

>>> [EMAIL PROTECTED] 6/10/2003 3:47:32 AM >>>
Zulfi,

Try setting both realm & host to null. That should do the trick

        HttpClient hc = new HttpClient();
        HttpState state = hc.getState();
        state.setAuthenticationPreemptive(true);
      // Set default credentials (realm & host are null)
        state.setCredentials(null, null, 
            new UsernamePasswordCredentials("zulfi", "zulfi"));


Folks,

The present convention for setting a default set of credentials is
utterly confusing and needs to be redesigned in 2.1. I believe we should
be using HttpState#setCredentials(HttpAuthRealm, Credentials) instead of
HttpState#setCredentials(String, String, Credentials). We should also
provide a static final class to represent the default set of
credentials:

public static final HttpAuthRealm DEFAULT_AUTH_CREDENTIALS = new
HttpAuthRealm(null, null);

The end user code might look similar to that below

        state.setCredentials(DEFAULT_AUTH_CREDENTIALS, 
            new UsernamePasswordCredentials("zulfi", "zulfi"));


Cheers

Oleg


-----Original Message-----
From: Zulfi Umrani [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, June 10, 2003 00:44
To: [EMAIL PROTECTED] 
Subject: preemptive


Tried to use the Preemptive Authentication feature. Could not get it
to
work. I used the HttpState.setAuthenticationPreemptive(true); to set
the
preemptive authentication ON. It still send the first request without
the Authorization header. Code sample is below. Would like to know,
how
to set up the Pre-emptive Authentication.

package test;

import java.io.*;
import java.net.URL;

import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.auth.*;
import org.apache.commons.httpclient.util.*;

public class JCTest {
    public static void main(String[] args) throws Exception {
        test0();
        test0();
        return;
    }

    public static void test0() throws Exception {
        System.out.println("running test0");

        String urlstr = "http://localhost:9999/services1/test";;
        URL url = new URL(urlstr);
        
        HttpClient hc = new HttpClient();
        HttpState state = hc.getState();
        state.setAuthenticationPreemptive(true);
        state.setCredentials("", url.getHost(), 
            new UsernamePasswordCredentials("zulfi", "zulfi"));

        PostMethod post = new PostMethod(urlstr);
        post.setDoAuthentication(true);

        post.addRequestHeader("Connection", "Keep-Alive");
        post.addRequestHeader("Content-Length", ""+msg.length());
        post.addRequestHeader("Content-Type", "text/xml;
charset=utf-8");

        InputStream reqis = new ByteArrayInputStream(msg.getBytes());
        
        post.setRequestBody(reqis);

        HostConfiguration hconfig = new HostConfiguration();
        hconfig.setHost(new URI(urlstr));
        
        hc.executeMethod(hconfig, post);

        System.out.println(post.getResponseBodyAsString());
        System.out.println();
            
    }
    
    private static String msg = "Text Message";

}


Thanks.

---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED] 
For additional commands, e-mail:
[EMAIL PROTECTED] 


---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED] 
For additional commands, e-mail:
[EMAIL PROTECTED] 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to