Как указать имя пользователя / пароль в Java Metro? - PullRequest
0 голосов
/ 04 августа 2011

Я пытаюсь создать клиент Web-сервиса с Metro, который использует WS-Security.

Я использовал Axis2, и чтобы указать имя пользователя / пароль в клиенте Axis2, я делаю:

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

Как мне предоставить имя пользователя / пароль в клиенте Metro?

1 Ответ

4 голосов
/ 18 августа 2011

Если вы хотите авторизоваться, используя основные заголовки 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;
}

Если служба использует NTLM (аутентификация Windows) (объяснение здесь ):

@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;
}

Сам этим не пользовался, но видел, как другие его используют:

@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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...