Java URLConnection error with ntlm authentication, but only on Linux and only Java 7
I changed code in the Client.java class, and recompiled it along with the rest of the com.sun.security.ntlm package, then I created a jar called rt_fix.jar which contains the classes of that particular package. Then I used a java startup option to force it to load my jar before the internal rt.jar.
-Xbootclasspath/p:/path_to_jar/rt_fix.jar
I don't like this solution, but it worked.
Here is the code I changed in Client.java, in the method type3:
Before :
if (domainFromServer != null) {
domain = domainFromServer;
}
After :
if (domainFromServer != null) {
//domain = domainFromServer;
}
It stops Java from altering the domain I try to authenticate to with the one recieved from the server when sending the 3rd part of the NTLM authentication. The domain I was trying to authenticate to is in fact the name of the server because the user accounts are local.
I had the same problem and solved it just by specifying the user name with the domain included in it:
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
System.getProperty("DOMAIN\\user"),
System.getProperty("password").toCharArray() ) ;
}
});
Correct is this:
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
"DOMAIN\\user",
"password".toCharArray() ) ;
}
});