Ich habe nach verschiedenen Dingen gesucht, aber es gab nur einen Hinweis auf die spezifische Implementierungsmethode in StackOverFlow (und auf Englisch ...), also habe ich mir Notizen zur Erinnerung gemacht.
Die Ausstellung von StackOverFlow ist wie folgt StackOverFlow:https://stackoverflow.com/questions/7910776/adding-user-password-to-soapheader-for-webservice-client-call-with-axis2 Autor: https://stackoverflow.com/users/957076/shiv-gopal (Diese Person scheint es selbst gelöst zu haben (ich löse das Problem selbst) ...
Fast wie die Antwort dieser Person, aber wenn Sie es so machen, wie es ist, tritt ein Fehler auf, so dass ich zusätzliche Korrekturen vornehme, wie im Kommentarteil unten beschrieben.
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 als erstes Argument des Arguments QName von createOMElement-Geben Sie den Sicherheits-URI an
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 als erstes Argument des Arguments QName von createOMElement-Geben Sie den Sicherheits-URI an
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);
Als zusätzlicher Korrekturpunkt wird in der Antwort von StackOverFlow im ersten Argument beim Erstellen eines QName-Objekts ein leeres Zeichen angegeben. In diesem Fall wird jedoch zur Laufzeit "java.lang.IllegalArgumentException: Ein vorangestelltes Element mit einem leeren Namespace kann nicht erstellt werden" angezeigt. Auftreten. Daher wird der WS-Sicherheits-URI explizit angegeben. Ich denke, es ist wahrscheinlich ein Fehler in dieser Antwort, aber ... ich frage mich, ob es eine Möglichkeit gibt, dies zu tun.
Legen Sie außerdem Ihren eigenen Benutzer und Ihr eigenes Passwort in omuserName.setText ("myusername") und omPassword.setText ("mypassword") fest.
In Bezug auf die "Spezifikationen" und "Konzepte" von WS-Security werden Sie, wenn Sie danach suchen, diese fair finden, aber Sie können eine konkrete Implementierungsmethode nicht so oft finden, und selbst wenn Sie sie finden, scheint die Version von aixs anders zu sein, sodass Sie sich frei fühlen können, den Header festzulegen Ich war in Schwierigkeiten, weil ich es nicht hatte. aixs2 Stub </ A> ist Service Client Bis auf den Abruf ist alles geschützt, und von außen kann fast nichts getan werden. <A HREF = "http://axis.apache.org/axis/java/apiDocs/org/apache/axis/client/Stub. Es scheint, dass der Freiheitsgrad im Vergleich zu HTML "target =" _ blank "> axis1 Stub </ A> sehr begrenzt ist. Wie diesmal fiel es mir schwer, den Header zu setzen.
Recommended Posts