2011-08-03 1 views
0

J'essaie de créer un client de service Web avec Metro qui utilise WS-Security.Comment spécifier le nom d'utilisateur/mot de passe dans Java Metro?

Je l'ai utilisé Axis2, et de spécifier le nom d'utilisateur/mot de passe dans un client Axis2, je fais:

org.apache.axis2.client.ServiceClient sc = stub._getServiceClient(); 
org.apache.axis2.client.Options options = sc.getOptions(); 
options.setUserName("USERNAME"); 
options.setPassword("PASSWORD"); 

Comment puis-je fournir un nom d'utilisateur/mot de passe dans un client Metro?

Répondre

4

Si vous souhaitez auth en-têtes de base http:

@WebEndpoint(name = "WSHttpBinding_ICustomerService") 
public ICustomerService getWSHttpBindingICustomerService() { 
    WebServiceFeature wsAddressing = new AddressingFeature(true); 

    ICustomerService service = 
     super.getPort(new QName("http://xmlns.example.com/services/Customer", 
       "WSHttpBinding_ICustomerService"), ICustomerService.class, 
       wsAddressing); 

    Map<String, Object> context = ((BindingProvider)service).getRequestContext(); 

    Map<String, List<String>> headers = new HashMap<String, List<String>>(); 
    headers.put("Username", Collections.singletonList("yourusername")); 
    headers.put("Password", Collections.singletonList("yourpassword")); 

    return service; 
} 

Si le service utilise NTLM (authentification Windows) (explication here):

@WebEndpoint(name = "WSHttpBinding_ICustomerService") 
public ICustomerService getWSHttpBindingICustomerService() { 
    WebServiceFeature wsAddressing = new AddressingFeature(true); 

    ICustomerService service = 
     super.getPort(new QName("http://xmlns.example.com/services/Customer", 
       "WSHttpBinding_ICustomerService"), ICustomerService.class, 
       wsAddressing); 

    NtlmAuthenticator auth = new NtlmAuthenticator(username, password); 
    Authenticator.setDefault(auth); 

    return service; 
} 

n'ont pas utilisé moi-même, mais vu autre l'utilise:

@WebEndpoint(name = "WSHttpBinding_ICustomerService") 
public ICustomerService getWSHttpBindingICustomerService() { 
    WebServiceFeature wsAddressing = new AddressingFeature(true); 

    ICustomerService service = 
     super.getPort(new QName("http://xmlns.example.com/services/Customer", 
       "WSHttpBinding_ICustomerService"), ICustomerService.class, 
       wsAddressing); 

    Map<String, Object> context = ((BindingProvider)service).getRequestContext(); 

    context.put(BindingProvider.USERNAME_PROPERTY, "yourusername"); 
    context.put(BindingProvider.PASSWORD_PROPERTY, "yourpassword"); 

    return service; 
} 
+0

Merci! Les en-têtes de variable de votre premier exemple sont définis mais non utilisés. Il y a quelque chose qui manque. –

Questions connexes