Я пытаюсь получить информацию от веб-службы, которая использует тип PasswordText WSS. Во-первых, я тестировал его с помощью soapUI и успешно получил данные. Затем я реализовал аутентификацию на Java, написав SecurityHandler:
public final class SecurityHandler implements SOAPHandler {
...
@Override
public boolean handleMessage(SOAPMessageContext messageContext) {
boolean outInd = (Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outInd) {
try {
WSSecUsernameToken builder = new WSSecUsernameToken();
builder.setPasswordType(WSConstants.PASSWORD_TEXT);
builder.setUserInfo(_username, _password);
builder.addNonce();
builder.addCreated();
Document doc = messageContext.getMessage().getSOAPPart().getEnvelope().getOwnerDocument();
WSSecHeader secHeader = new WSSecHeader();
secHeader.insertSecurityHeader(doc);
builder.build(doc, secHeader);
} catch (Exception e) {
LOGGER.error("Unable to handle SOAP message", e);
return false;
}
}
return true;
}
...
}
Я проверил объект документа с помощью XMLUtils.PrettyDocumentToString (doc)
и увидел, что он похож на XML, отправленный soupUI - вся аутентификационная информация (логин, пароль, nonce и время создания) были на месте, атрибут mustUnderstand тега Security
был истинным.
Затем я столкнулся с ошибкой:
javax.xml.ws.soap.SOAPFaultException: Заголовки MustUnderstand: [{ http://docs.oasis-open.org/wss/2004/01/oasis- 200401-wss-wssecurity-secext-1.0.xsd } Безопасность] не поняты
Я нашел советы по удалению атрибута mustUnderstand из тега Security
, но это не помогает. У вас есть идеи?
P.S.
Конечная точка веб-службы находится на HTTPS .
Часть политики из WSDL:
Запрос soapUI:
username
password
li/0YK2wxrmrHL7Cg+etdQ==
2012-02-21T08:59:10.262Z
xxx@example.com
Мой запрос:
username
password
+jeleKO9zr0/wLjAIYcmSg==
2012-02-21T09:42:03.760Z
xxx@example.com