2010-05-13 5 views
2

Nous implémentons un service web qui va agir comme une couche intermédiaire entre les clients et une autre application. Nos exigences pour le service Web indiquent que nous devons envoyer le nom d'utilisateur et le mot de passe dans l'en-tête SOAP en utilisant WS-Security standard.Accès au nom d'utilisateur/mot de passe depuis le service Web (JAX-WS)?

L'implémentation de service Web doit prendre les informations transmises via l'appel de méthode et les combiner avec le nom d'utilisateur et le mot de passe pour appeler l'autre application, et c'est là que mon problème commence.

Je n'arrive pas à trouver un moyen facile d'accéder au nom d'utilisateur et au mot de passe de l'en-tête SOAP de mon implémentation de service Web. Je peux accéder à l'utilisateur principal (nom d'utilisateur) via le WebServiceContext injecté, mais je ne vois pas de moyen facile d'obtenir le mot de passe.

Je peux accéder au SOAPHeader et je pourrais probablement analyser le XML pour obtenir l'élément de mot de passe, mais cela semble être une manière très compliquée de résoudre ce problème. Je ne connais pas autant JAX-WS et WS-Security que je le voudrais. Je ne connais pas autant JAX-WS et WS-Security. J'espère que quelque chose d'évident m'échappe à quelqu'un d'autre - peut-être devrais-je mettre en place une sorte de gestionnaire?

Répondre

2

La meilleure approche est de tirer le nom d'utilisateur et mot de passe de l'en-tête SOAP en spécifiant comme paramètre à votre méthode JAX-WS:

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

Vous pouvez aussi créer un SOAPHandler:

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

C'est enregistré dans la norme-JAXWS-terminal-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> 
+0

Cela ressemble exactement à ce que je cherche. Si j'ajoute un paramètre à ma méthode de service avec l'en-tête = true, cela force-t-il les clients consommant le webservice à changer leur implémentation, ou le paramètre mappé de l'en-tête sans que le client doive faire quoi que ce soit? – Chad

Questions connexes