In my current work environment, our Web access is proxied via a MS ISA server, which uses NTML proxy authentication. I was recently looking at NTLM proxy authentication, as I had problems running Subversion inside the proxy (this should be fixed now with the newest release of Neon, Subversion’s WebDAV layer). I am currently looking at some NTLM providers in the Java space, and one of the obvious ones I came across is the Jakarta HttpClient. Here is an example that will authenticate to an NTLM-based proxy. The code is for HttpClient 3.0-RC2.
package uk.co.researchkitchen.ntlm; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.NTCredentials; import org.apache.commons.httpclient.auth.AuthPolicy; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.GetMethod; public class TestNTLM { private void execute() throws HttpException, IOException { HttpClient proxyclient = new HttpClient(); proxyclient.getHostConfiguration().setHost("www.yahoo.com"); proxyclient.getHostConfiguration().setProxy("lproxyhost.researchkitchen.co.uk", 8080); List authPrefs = new ArrayList(); authPrefs.add(AuthPolicy.NTLM); proxyclient.getState().setProxyCredentials( new AuthScope(null, 8080, null), new NTCredentials("username", "password", "", "MYDOMAIN")); proxyclient.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs); GetMethod get = new GetMethod("/"); int status = proxyclient.executeMethod(get); System.out.println(status); BufferedReader bis = new BufferedReader(new InputStreamReader(get.getResponseBodyAsStream())); int count = 0; int read = 0; System.out.println("Content length: " + get.getResponseContentLength()); char[] body = new char[2048]; do { count = bis.read(body); read += count; System.out.println(body); } while (count != -1); System.out.println("Read " + read + " bytes"); } public static void main(String[] args) throws HttpException, IOException { new TestNTLM().execute(); }
} |