Вставка учетных данных пользователя в заголовок HTTP-запроса - PullRequest
0 голосов
/ 15 июля 2010

Я пытаюсь вставить учетные данные пользователя в заголовок HTTP-запроса, который затем отправляется через https в веб-службу, которая, в свою очередь, читает их для целей авторизации ...

Клиент и служба записываютсяв Java.

На стороне клиента я делаю следующее:

ExampleImplService service = new ExampleImplService();
Example port = service.getExampleImplPort();

Map<String, Object> reqContext = ((BindingProvider) port).getRequestContext();
Map<String, List<String>> reqHeader = new HashMap<String, List<String>>();
reqHeader.put("Username", Collections.singletonList("user"));
reqHeader.put("Password", Collections.singletonList("password"));
reqContext.put(MessageContext.HTTP_REQUEST_HEADERS, reqHeader);

System.out.println(port.somemethod());

Если я программно выкидываю reqContext после своих добавлений, я вижу добавленные заголовки.Но через tcpmon я вижу, что они не отправляются в веб-сервис ... Естественно, я не могу найти их нигде в веб-сервисе.

Есть идеи, что я делаю неправильно?

1 Ответ

2 голосов
/ 16 июля 2010

Я полагаю, что вы используете jax-ws для потребления веб-сервисов, поэтому мой ответ будет ориентирован на него

Вы можете установить свойства имени пользователя и пароля следующим образом

reqContext.put( BindingProvider.USERNAME_PROPERTY, "user" );
reqContext.put( BindingProvider.PASSWORD_PROPERTY, "password" );

Если это не сработает, вам может понадобиться Аутентификатор (не работает с Axis2)

скопировано с здесь

class MyAuthenticator extends Authenticator {
    private String username, password;

    public MyAuthenticator(String user, String pass) {
        username = user;
        password = pass;
        setDefault( this );
    }

    protected PasswordAuthentication getPasswordAuthentication() {
        System.out.println("Requesting Host  : " + getRequestingHost());
        System.out.println("Requesting Port  : " + getRequestingPort());
        System.out.println("Requesting Prompt : " + getRequestingPrompt());
        System.out.println("Requesting Protocol: " + getRequestingProtocol());
        System.out.println("Requesting Scheme : " + getRequestingScheme());
        System.out.println("Requesting Site  : " + getRequestingSite());

        return new PasswordAuthentication(username, password.toCharArray());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...