Wir versuchen, eine Sicherheitsimplementierung in unseren JAX-Webdiensten durchzuführen und übergeben den Benutzernamen und das Passwort in der Kopfzeile wie folgt.Abrufen von Soap-Header auf der JAXWS-Serverseite
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="0" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="Id-8zvykuwmK8yg6dxn3632nQJB" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>gears_user</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">##########</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
Im Java wir versuchen, die den Benutzernamen und das Passwort abrufen, aber wir nicht sicher sind, wie es zu tun, wie, es ist ein Teil von SOAP-Header und wir haben Header-Informationen nicht vor abgerufen.
.....
@Resource
WebServiceContext wsctx;
public ServiceAvailabilityResponseType inquireGeographicEligibility(ServiceAvailabilityRequestType inquireGeographicEligibilityRequest)
throws WSException
{
HeaderList hl=(HeaderList)wsctx.getMessageContext().get(JAXWSProperties.INBOUND_HEADER_LIST_PROPERTY);
QName security = new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
"Security");
Header hd = hl.get(security, false);
QName userName = new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
"Username");
try
{
System.out.println(hd.readHeader());
System.out.println(hd.getAttribute(userName));
}catch (Exception e) {
System.out.println(e.getMessage());
}
}
Wir versuchen, wie oben zu tun und erhalten die Header-Elemente, aber es gibt uns nicht den Wert zurück. Jede Hilfe auf dem Weg, den Benutzernamen und das Passwort zu erhalten, wird geschätzt.
Ich habe diese Antwort hochgestuft, aber dann habe ich festgestellt, dass es nicht in jedem Fall funktioniert. Nun habe ich einen Validator, der 'PasswordValidationCallback.PasswordValidator' implementiert, und in diesem Fall gibt' header.examineAllHeaderElements() '' einen leeren Interator zurück, als ob es keine Knoten in der Kopfzeile gäbe, 'getChildElements()' macht das gleiche. Warum das? Der Validierer löscht den Header irgendwie aus der Anfrage? – apcuk