5

Comment puis-je accéder à un service Web via une authentification http de base? J'utilise le netbeans construit dans les fonctionnalités du client webservice. Mais lorsque j'essaie d'accéder au service web, j'obtiens une exception avec un message d'erreur 401 auth failed.NetBeans Basic Http Auth Jax-WS

Comment puis-je transmettre le bon nom d'utilisateur et mot de passe?

Merci!

Répondre

4

Vous pouvez utiliser la classe BindingProvider ou WSBindingProvider pour accéder à un service Web via une authentification http de base. Le code est le suivant.

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

Cela fonctionnera si le WSDL n'est pas protégé par l'authentification Http de base – snowflake

+0

pourquoi cela ne fonctionne pas pour moi? J'ai exactement cela 'AImpl aImplPort = new AImplService(). GetAImplPort(); BindingProvider prov = (BindingProvider) aImplPort; prov.getRequestContext(). Put (BindingProvider.USERNAME_PROPERTY, "fred"); prov.getRequestContext(). Put (BindingProvider.PASSWORD_PROPERTY, "fred"); Chaîne b = aImplPort.b(); System.out.println (b); 'il n'envoie pas l'en-tête http d'autorisation attendu –

3

Vous pouvez également fournir votre propre authentificateur. De cette façon, cela fonctionnera même si le WDSL lui-même est protégé par l'authentification HTTP de base.

@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

Je ne savais pas que Java contenait cette fonctionnalité. Très utile. Merci! – gruenewa

+0

pourquoi cela fonctionne pour moi et le 'reqContext.put (BindingProvider.USERNAME_PROPERTY," nom d'utilisateur "); 'l'approche n'est-elle pas liée à ma version java? –

Questions connexes