5

¿cómo puedo acceder a un servicio web a través de una autenticación HTTP básica? Estoy usando netbeans en las características del cliente del servicio web. Pero cuando intento acceder al servicio web, recibo una excepción con un mensaje de error de autenticación 401.Netbeans Basic Http Auth Jax-WS

¿Cómo puedo pasar el nombre de usuario y la contraseña correctos?

¡Gracias!

Respuesta

4

Puede usar la clase BindingProvider o WSBindingProvider para acceder a un servicio web a través de una autenticación http básica. El código es el siguiente.

XxxService service = new XxxService(); 
Xxx port = service.getXxxPort(); 

Map<String, Object> reqContext = ((BindingProvider)port).getRequestContext(); 
reqContext.put(BindingProvider.USERNAME_PROPERTY, "username"); 
reqContext.put(BindingProvider.PASSWORD_PROPERTY, "password"); 
+2

Esto funcionará si el WSDL no está protegido por Basic Http Autenticación – snowflake

+0

¿por qué no funciona para mí? Tengo exactamente eso 'AImpl aImplPort = new AImplService(). GetAImplPort(); BindingProvider prov = (BindingProvider) aImplPort; prov.getRequestContext(). Put (BindingProvider.USERNAME_PROPERTY, "fred"); prov.getRequestContext(). Put (BindingProvider.PASSWORD_PROPERTY, "fred"); Cadena b = aImplPort.b(); System.out.println (b); 'no se está enviando el encabezado HTTP de autorización esperado –

3

También puede proporcionar su propio Autenticador. De esa forma funcionará incluso si el WDSL está protegido por autenticación HTTP básica.

@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()); 

} 
+0

No sabía que Java contiene esta característica. Muy útil. ¡Gracias! – gruenewa

+0

por qué funciona para mí y 'reqContext.put (BindingProvider.USERNAME_PROPERTY," username "); '¿El enfoque no está relacionado con mi versión java? –

Cuestiones relacionadas