¿Cómo puedo consumir un servicio web protegido con autenticación básica HTTP utilizando el marco de CXF?
-
22-08-2019 - |
Pregunta
He intentado conseguir que funcione mediante el CXF Guía del usuario , pero no he tenido suerte.
Estoy intentando llamar al servicio web utilizando el código de Java.
Solución
Esto está cubierto por la especificación JAX-WS. Básicamente, establecer el nombre de usuario / contraseña como propiedades en el contexto de la petición:
((BindingProvider)proxy).getRequestContext().put(
BindingProvider.USERNAME_PROPERTY, "joe");
((BindingProvider)proxy).getRequestContext().put(
BindingProvider.PASSWORD_PROPERTY, "pswd");
El tiempo de ejecución de los pone en la cabecera HTTP.
Otros consejos
Puede proporcionar su propia Authenticator. Esa manera de que funcione si el WSDL en sí está protegido por la autenticación básica HTTP.
@WebServiceRef(wsdlLocation = "https://laka/sito?wsdl")
static XxxService service;
public static void main(String[] args) {
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user", "password".toCharArray());
}
});
service = new XxxService();
Xxx port = service.getXxxPort();
// invoke webservice and print response
XxxResponse resp = port.foo();
System.out.println(resp.toString());
}
Hay una manera mucho mejor:
cuando se genera a partir de WSDL Java, la opción de añadir "-exsh verdadero":
wsdl2java -exsh cierto -p edu.sharif.ce http://wsdl.ir/WebServices /WebService.asmx?WSDL
y añadir UserCredential cuando se utiliza:
UserCredentials user = new UserCredentials();
user.setUserid("user");
user.setPassword("pass");
ResearchWebService_Service service = new ResearchWebService_Service();
ResearchWebService port = service.getResearchWebService();
port.addNewProject(newProject, user);