Я пытаюсь создать клиент для вызова Soap Web Service с использованием Spring. Я использую CXF для генерации клиентских классов Java для создания тела и выполнения запроса, но у меня возникают проблемы с заголовком безопасности, который должен иметь BinarySecurityToken.
Я могу сгенерироватьзаголовок пользователя / пароля, с перехватчиком, который обеспечивает CallbackHandler, таким образом:
XwsSecurityInterceptor sec = new XwsSecurityInterceptor();
System.out.println(username);
System.out.println(policy);
sec.setPolicyConfiguration(policy);
sec.setCallbackHandler(new SimpleUsernamePasswordCallbackHandler(username, password));
Это создает заголовок SOAP с пользователем и паролем, как этот:
<SOAP-ENV:Header>
<wsse:Security soap-env:mustUnderstand="1" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-24768380" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>N070044</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">N070044</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</SOAP-ENV:Header>
Я пытаюсь сделать что-то похожее в перехватчике, но вместо имени пользователя и пароля, используя BinarySecurityToken, поэтому сгенерированный заголовок SOAP выглядит следующим образом:
<SOAP-ENV:Header>
<wsse:Security SOAP-ENV:actor="http://www.isban.es/soap/actor/wssecurityUserPass" SOAP-ENV:mustUnderstand="1" S12:role="wsssecurity" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:S12="http://www.w3.org/2003/05/soap-envelope">
<wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
wsu:Id="SSOToken" ValueType="esquema" EncodingType="wsse:Base64Binary">QjQ3MDY5MzBFMDNDRjQwMDhGMjYyRDJCIzE4MC4xMTIuMTA1LjQ4IzEzODUzODE4NzAzMTAjUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVNWTlBMVGc0TlRrdE1TSS9QangwYjJ0bGJrUmxabWx1YVhScGIyNCtQSFZ6WlhKSlJENXVPVEF5TWpJOEwzVnpaWEpKUkQ0OFlXeHBZWE0rYmprd01qSXlQQzloYkdsaGN6NDhibUZ0WlQ1RFFWSk1UMU1nVFVGU1ZFbE9SVm9nVWtWRVQwNUVUend2Ym1GdFpUNDhMM1J2YTJWdVJHVm1hVzVwZEdsdmJqND0jREVTZWRlL0NCQy9QS0NTNVBhZGRpbmcjdjEjSW50cmFJU0JBTkRFUyNOT1QgVVNFRCNTSEExd2l0aFJTQSNpRXZma2luOGJVNFdnb1FTYnZvbzZEWmJENklncmJ1bEhXblVvQTJscysrczZsazNobmloaEoxRTV0cTM0VGFpZy9UUDZKdE5mMHRxSVl5dDV0Ni82MWZPcWgzRGNmNVdkZVJWNXBpRlJzazNqQU1tOCtZMGFKQlA2dkdBZWhPc1cxWjBjcFYyV05leitVTnR5UnlySysxQTdVNXJXZzB3UERQMWxEcHduOGc9
</wsse:BinarySecurityToken>
</wsse:Security>
</SOAP-ENV:Header>
Но я не могунайти способ сделать это. Я читал об использовании SpringCertificateValidationCallbackHandler, но я не могу найти примеры того, как его использовать.
Это правильный подход? Или я должен сделать это с совершенно другим подходом?
Большое спасибо заранее