Bonjour !
Cela faisait longtemps que je n'étais pas venu dans ces contrées...

Voici mon problème.
On utilise actuellement un handler Axis 1.4 pour protéger l'accès à des services web jax-rpc. Par 'protéger', j'entends :
  • côté client :
    • authentifier les requêtes avec une assertion SAML ;
    • signer le corps des requêtes ;
    • vérifier l'identité du service qui a répondu ;
    • vérifier la signature des réponses ;
  • côté serveur :
    • vérifier l'identité du l'émetteur d'une requête (via l'assertion SAML jointe) ainsi que son autorisation ;
    • vérifier la signature des requêtes ;
    • communiquer certains paramètres du client à l'application ;
    • authentifier les réponses avec une assertion SAML ;
    • signer les réponses.


Le handler est développé complètement à part des applications. Il est juste rajouté au déploiement sur le serveur.

J'ai donc 4 cas à distinguer :
  1. requête émise par le client ;
  2. requête reçue par le service ;
  3. réponse retournée par le service ;
  4. réponse reçue par le client.

Bien évidemment, un service web peut être lui-même client d'un autre, ce qui fait que le même handler doit pouvoir gérer tous les cas.

Avec Axis 1.4, je peux distinguer ces 4 cas en jouant sur :
  • MessageContext.getPastPivot() -> requête / réponse ;
  • MessageContext.isClient() -> client / serveur.


Les technologies évoluant, il nous faut maintenant protéger des services JAX-WS. On a donc étendu SOAPHandler et utilisé la propriété MESSAGE_OUTBOUND_PROPERTY pour différencier le cas requête / réponse. Mais je ne trouve pas d'équivalent au MessageContext.isClient().

Là est ma question : comment différencier le cas client / serveur ?

Merci d'avance.