J'ai recherché diverses choses, mais il n'y avait qu'un indice sur la méthode d'implémentation spécifique dans StackOverFlow (et en anglais ...), alors j'ai fait une note pour les rappels.
Les expositions de StackOverFlow sont les suivantes StackOverFlow:https://stackoverflow.com/questions/7910776/adding-user-password-to-soapheader-for-webservice-client-call-with-axis2 Auteur: https://stackoverflow.com/users/957076/shiv-gopal (Cette personne semble avoir résolu le problème par elle-même (je résous le problème moi-même) ...
Presque comme cette personne a répondu, mais si je l'ai fait tel quel, une erreur s'est produite, alors je fais des corrections supplémentaires comme décrit dans le commentaire ci-dessous.
OMFactory omFactory = OMAbstractFactory.getOMFactory();
OMElement omSecurityElement = omFactory.createOMElement(new QName( "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security", "wsse"), null);
OMElement omusertoken = omFactory.createOMElement(new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "UsernameToken", "wsu"), null);
//WS comme premier argument de l'argument QName de createOMElement-Spécifiez l'URI de sécurité
OMElement omuserName = omFactory.createOMElement(new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Username", "wsse"), null);
omuserName.setText("myusername");
//WS comme premier argument de l'argument QName de createOMElement-Spécifiez l'URI de sécurité
OMElement omPassword = omFactory.createOMElement(new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Password", "wsse"), null);
omPassword.addAttribute("Type","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText",null );
omPassword.setText("mypassword");
omusertoken.addChild(omuserName);
omusertoken.addChild(omPassword);
omSecurityElement.addChild(omusertoken);
stub._getServiceClient().addHeader(omSecurityElement);
Comme point de correction supplémentaire, dans la réponse de StackOverFlow, un caractère vide est spécifié dans le premier argument lors de la création d'un objet QName, mais si tel est le cas, "java.lang.IllegalArgumentException: Impossible de créer un élément préfixé avec un espace de noms vide" apparaîtra à l'exécution. apparaître. Par conséquent, l'URI WS-Security est explicitement spécifié. Donc je pense que c'est probablement une erreur dans cette réponse, mais ... je me demande s'il y a un moyen de le faire.
Définissez également votre propre utilisateur et mot de passe dans omuserName.setText ("myusername"); et omPassword.setText ("mypassword");.
Concernant les "spécifications" et les "concepts" de WS-Security, si vous le recherchez, vous le trouverez équitablement, mais vous ne trouvez pas tellement de méthode d'implémentation concrète, et même si vous le trouvez, il semble que la version d'aixs soit différente, vous pouvez donc vous sentir libre de faire setHeader. J'avais des ennuis parce que je ne l'avais pas. aixs2 Stub est Service Client Tout est protégé sauf pour la récupération, et presque rien ne peut être fait de l'extérieur, <A HREF = "http://axis.apache.org/axis/java/apiDocs/org/apache/axis/client/Stub. Il semble que le degré de liberté soit très limité par rapport au html "target =" _ blank "> axis1 Stub . Comme cette fois, j'ai eu du mal à régler l'en-tête.
Recommended Posts