En este post se describe una forma que funciona para autenticar un web service con usuario y contraseña HTTP. La salvedad está en que el Web Service está desarrollado en .Net sobre IIS y el cliente está desarrollado en Java (JAX-WS) con Netbeans.
Como regla general se utiliza una implementación de la clase Authenticator:
class MyAuthenticator extends Authenticator {
private String user;
private String password;
public MyAuthenticator(String user, String password) {
this.user = user;
this.password = password;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
PasswordAuthentication auth = new PasswordAuthentication(user, password.toCharArray());
return auth;
}
}
Y después de ejecutaría:
...
WSService service = new WSService (new URL(wsdl));
WSServicePort port = service.getWSServicePort();
MyAuthenticator myAuth = new MyAuthenticator("DOMINIO\USUARIO", "PASSWORD");
Authenticator.setDefault(myAuth);
Objetc rtn = port.getMethod();
...
Pero en este caso, la forma que funciona sería:
... WSService service = new WSService (new URL(wsdl)); WSServicePort port = service.getWSServicePort(); ((BindingProvider) port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "DOMINIO\USUARIO"); ((BindingProvider) port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "PASSWORD"); Objetc rtn = port.getMethod(); ...
Algún detalle más del caso en «JAX-WS Authentication problem -javax.xml.ws.WebServiceException Response: ‘401: Unauthorized’«