Я разрабатываю клиент веб-сервиса для существующего веб-сервиса.Я использую Apache CXF 2.2.Служба требует безопасности с именем пользователя и паролем в виде простого текста, который я настроил следующим образом:
<bean id="myPasswordCallback"
class="com.kraemer_imd.mobilized.m2m_adapter.ClientPasswordCallback"/>
<jaxws:client id="m2mClientService"
serviceClass="de.vodafone.easypu.ws.EasyPUOrderServicePortType"
address="http://m2m.vodafone.de/speasy/services/EasyPUOrderService"
bindingId="http://www.w3.org/2003/05/soap/bindings/HTTP/">
<jaxws:outInterceptors>
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
<constructor-arg>
<map>
<entry key="action" value="UsernameToken Timestamp"/>
<entry key="passwordType" value="PasswordText"/>
<entry key="user" value="myusername"/>
<entry key="passwordCallbackRef">
<ref bean="myPasswordCallback"/>
</entry>
</map>
</constructor-arg>
</bean>
</jaxws:outInterceptors>
</jaxws:client>
Это работает довольно хорошо.Но я не понимал, почему я должен предоставить пароль через обработчик обратного вызова, а не просто предоставить его через конфигурацию.В документации сказано, что это по соображениям безопасности, но я не понимаю, почему это должно быть более безопасно, если иметь обработчик обратного вызова, который читает его из файла свойств (или, что еще хуже, он жестко закодирован в обратном вызове).
Так, может кто-нибудь объяснить это мне?Может быть, обратный вызов предназначен для некоторых магических вещей, которые я пропустил ..
Спасибо, Мишель