Доступ к имени пользователя / паролю из веб-службы (JAX-WS)? - PullRequest
2 голосов
/ 13 мая 2010

Мы внедряем веб-сервис, который будет выступать в качестве промежуточного слоя между клиентами и другим приложением. В наших требованиях к веб-службе говорится, что нам необходимо отправить имя пользователя и пароль в заголовке SOAP с использованием стандартного WS-Security.

Реализация веб-службы должна взять информацию, переданную через вызов метода, и объединить ее с именем пользователя и паролем для вызова другого приложения, и именно здесь начинается моя проблема.

Я не могу найти простой способ получить имя пользователя и пароль из заголовка SOAP в моей реализации веб-сервиса. Я могу добраться до пользователя (имя пользователя) через введенный WebServiceContext, но я не вижу простого способа получить пароль.

Я могу добраться до SOAPHeader и, возможно, проанализировать XML, чтобы получить элемент пароля, но это кажется очень грязным способом решения этой проблемы.

Я не настолько осведомлен о JAX-WS и WS-Security, как хотелось бы. Я надеюсь, что мне не хватает чего-то очевидного для кого-то другого - может быть, мне нужно реализовать какой-нибудь обработчик?

1 Ответ

2 голосов
/ 13 мая 2010

Самый простой подход - извлечь имя пользователя и пароль из заголовка SOAP, указав его в качестве параметра для вашего метода JAX-WS:

@WebMethod
public String performAction( @WebParam(name="credentials", header=true)
                             Credentials credentials,
                             @WebParam( name="...")....

Вы также можете создать SOAPHandler:

public class AuthenticationHandler implements SOAPHandler<SOAPMessageContext>
{
    //Implement appropriate methods here
}

Это зарегистрировано в стандартном jaxws-endpoint-config.xml:

<jaxws-config xmlns="urn:jboss:jaxws-config:2.0" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
              xmlns:javaee="http://java.sun.com/xml/ns/javaee"
              xsi:schemaLocation="urn:jboss:jaxws-config:2.0 jaxws-config_2_0.xsd">
   <endpoint-config>
      <config-name>WebService Endpoint</config-name>
      <pre-handler-chains>
         <javaee:handler-chain>
            <javaee:protocol-bindings>##SOAP11_HTTP</javaee:protocol-bindings>
            <javaee:handler>
                <javaee:handler-name>AuthHandler</javaee:handler-name>
                <javaee:handler-class>com.example.AuthenticationHandler</javaee:handler-class>
            </javaee:handler>
         </javaee:handler-chain>
      </pre-handler-chains>
   </endpoint-config>
</jaxws-config>
...