Как проверить ws-безопасность? - PullRequest
2 голосов
/ 06 апреля 2011

Я собираюсь разработать веб-приложение с веб-сервисами. Я уже настроил jax-ws и ws-security. Я использовал soapUI и отправил следующий запрос:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="..." >
 <soapenv:Header>
  <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
    <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-2">
      <wsu:Created>2011-11-11T00:05:05.044Z</wsu:Created>
      <wsu:Expires>2012-11-11T00:10:05.044Z</wsu:Expires>
    </wsu:Timestamp>
    <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-1">
      <wsse:Username>user</wsse:Username>
      <wsse:Password>password</wsse:Password>
    </wsse:UsernameToken>
  </wsse:Security>
</soapenv:Header>
   <soapenv:Body>
      <soap:foo>
         <arg0>1</arg0>
      </soap:foo>
   </soapenv:Body>
</soapenv:Envelope>

Мне нужно получить имя пользователя и пароль из шапки. В приложении я могу получить его по следующему коду:

@Resource
WebServiceContext context;
...
private static final String PRINCIPAL_RESULT = "wss4j.principal.result";
...
WSUsernameTokenPrincipal wsutp = (WSUsernameTokenPrincipal) context.getMessageContext().get(PRINCIPAL_RESULT);       
..
String user = wsutp.getName()
String password = wsutp.getPassword();

Но я понятия не имею, как мне протестировать его с помощью тестов jUnit, потому что context.getMessageContext () будет иметь значение NULL в тестовом классе.

Кто-нибудь знает хорошее руководство или предоставляет пример кода?

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Вам нужно смоделировать ресурсы, которые недоступны в ваших тестах junit. Пожалуйста, взгляните на такие рамки, как Mokito (http://mockito.org/). Там вы можете сделать что-то вроде:

  //You can mock concrete classes, not only interfaces
  LinkedList mockedList = mock(LinkedList.class);

 //stubbing
 when(mockedList.get(0)).thenReturn("first");
 when(mockedList.get(1)).thenThrow(new RuntimeException());

Или для вашего случая:

WSUsernameTokenPrincipal mockedWsutp = mock(WSUsernameTokenPrincipal.class);
when(mockedWsutp.getName()).thenReturn("TheNameRequiredForYourTestCase");
...

С помощью этих структур вы можете имитировать недоступные ресурсы. И они легко интегрируются с junit. Я надеюсь, что это дает некоторые полезные идеи.

0 голосов
/ 13 июня 2014

Попробуйте: Web-сервис JAX-WS защищен с помощью XWS-Security (простой текстовый пароль) [http://mananvpanchal.blogspot.com/2010/06/jax-ws-webservice-with-plaintext.html][1]

...