Может быть, я могу найти здесь какой-нибудь helpe. Мне нужно получить доступ к веб-сервису, но сначала мне нужно проверить подлинность моего клиента с помощью хранилища ключей. Я не могу использовать весну. В весенне-ws.xml такая конфигурация работает для клиентов моих коллег:Клиент Java Web Service с хранилищем ключей
<bean class="org.springframework.ws.soap.security.wss4j.support.CryptoFactoryBean" id="clientCrypto">
<property name="configuration">
<util:properties>
<prop key="org.apache.ws.security.crypto.provider">org.apache.ws.security.components.crypto.Merlin</prop>
<prop key="org.apache.ws.security.crypto.merlin.keystore.type">jks</prop>
<prop key="org.apache.ws.security.crypto.merlin.keystore.password">${esb.keystore.password}</prop>
<prop key="org.apache.ws.security.crypto.merlin.keystore.alias">${esb.keystore.user}</prop>
<prop key="org.apache.ws.security.crypto.merlin.file">src\main\resources\${esb.keystore.location}</prop>
</util:properties>
</property>
</bean>
Мой клиент, как это:
PortalCustomerService service = new PortalCustomerService();
PortalCustomerPortType port = service.getSomethingHttpPort();
BindingProvider bindingProvider = (BindingProvider) port;
Binding binding = bindingProvider.getBinding();
List<Handler> handlerList = binding.getHandlerChain();
handlerList.add(new MyHandler());
binding.setHandlerChain(handlerList);
//calling webmethod
MyResponse response = port.checkClients(getRequest());
и MyHandler имеет метод handleMessage так:
public boolean handleMessage(SOAPMessageContext messageContext) {
Boolean outboundProperty = (Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue()) {
// I think I need to add something here but I dont know what
} else {}
return true;
}
У меня есть закрытый ключ: myportal.key, открытый ключ: portal.cer.
Без аутентификации я получил:
javax.xml.ws.soap.SOAPFaultException: An error was discovered processing the <wsse:Security> header
Это очень плохой вопрос, Извините :( – Geek
Как я могу улучшить это? :) – marram
System.setProperty ("javax.net.ssl.keyStore", keystore); System.setProperty ("javax.net.ssl.keyStorePassword", пароль); wont help :( – marram