JAX-WS клиент |Отправка клиентских запросов с заголовком безопасности - PullRequest
2 голосов
/ 09 марта 2012

Я реализовал Spring WS, используя XWSS для безопасности. Я добавил файл политики безопасности в свое приложение.

<xwss:SecurityConfiguration xmlns:xwss="http://java.sun.com/xml/ns/xwss/config"
    dumpMessages="true">    
    <xwss:RequireTimestamp 
        id="tsp" 
        maxClockSkew="60" 
        timestampFreshnessLimit="300">
    </xwss:RequireTimestamp>
    <xwss:RequireUsernameToken 
        id="token" 
        passwordDigestRequired="false" 
        nonceRequired="false"/>
    <xwss:Timestamp></xwss:Timestamp>
    <xwss:UsernameToken 
        name="service" 
        password="service" 
        id="uToken" 
        digestPassword="true"
        useNonce="true"/>
</xwss:SecurityConfiguration>

Сейчас я разрабатываю клиент для доступа к WS. Охрана работает отлично. Но я не могу проверить случай УСПЕХА, в котором клиент может успешно получить ответ от моего сервиса. Проблема в том, что я не знаю, как заставить моего клиента отправлять имя пользователя и метку времени вместе с запросом. Я использую IDE NetBeans и внедряю клиент JAX-WS для доступа к Spring WS, используя это руководство .

Пожалуйста, дайте мне знать, что нужно сделать.

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Для Spring WSS нет большой разницы между добавлением защитного заголовка к входящим мыльным сообщениям или к исходящим. Процесс очень похож.

В обоих случаях вы должны создать перехватчик для добавления заголовка безопасности. Это описано здесь . Таким образом, если вы создаете клиент WS с использованием Spring, у вас не должно быть проблем, особенно если вы уже разработали серверную часть, но учебник, на который вы ссылались, не похож на использование Spring для реализации клиента.

1 голос
/ 28 мая 2012

Вы можете сделать это, добавив следующий код в свой класс / класс клиента, расширяющий поддержку webservicetgatewaysupport.

SoapHeader header = msg.getSoapHeader();
StringSource headerSource = new StringSource("<wsse:Security xmlns:wsse=\"http://docs.oasis-
open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" mustUnderstand=\"1\">   <wsse:UsernameToken> 
<wsse:Username>"+userName+"</wsse:Username>  <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-username-token-profile-1.0#PasswordText\">"+password+"</wsse:Password> </wsse:UsernameToken>" 
+"</wsse:Security>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, header.getResult());

Выше приведено описание обработчика обратного вызова сообщения метода marshalSendANDRecieve для webserviceTemplate

...