Как аутентифицировать заголовок мыла ws-security с помощью jaxws на сервере tomcat

Я разработал простой веб-сервис с помощью JAX-WS RT и развернул его на сервере Tomcat 6. Мне нужно аутентифицировать вызовы моей веб-службы, используя ws-security в заголовке SOAP.

Мой подход состоял в том, чтобы использовать обработчик цепочки для извлечения имени пользователя и пароля в заголовке мыла и аутентификации в моем коде. Это правильный подход или нет, и если нет, то каков правильный подход для этого?

Используя soapUI, я отправил следующий заголовок

 <soapenv:Header> 
  <wsse:Security soapenv:mustUnderstand="1" 
  xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">  
     <wsse:UsernameToken> 
        <wsse:Username>test</wsse:Username> 
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">test</wsse:Password> 
     </wsse:UsernameToken> 
  </wsse:Security> 

с этим заголовком я получаю следующую ошибку

  <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
  <SOAP-ENV:Fault xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
     <faultstring>MustUnderstand headers:[{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security] are not understood</faultstring>
     <faultcode>SOAP-ENV:MustUnderstand</faultcode>
  </SOAP-ENV:Fault>

Используя JAX-WS rt, как мне настроить свой веб-сервис для приема этого типа заголовка и аутентификации.


person user2018658    schedule 28.01.2013    source источник


Ответы (1)


Использование цепных обработчиков — это один из способов обработки заголовков ws-security, это просто подход более низкого уровня по сравнению с такими фреймворками, как Rampart (хотя эти фреймворки обычно просто реализуют эти обработчики для вас). Если вы пишете свой собственный обработчик сообщений, вы должны переопределить

Set<QName> getHeaders()

объявить, какие заголовки вы понимаете. В этом случае верните набор, содержащий

QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security")

чтобы избежать ошибки «MustUnderstand».

person Drunix    schedule 07.05.2013
comment
Вот пример реализации заголовка через обработчики: javajeedevelopment.blogspot.com/2011/01/ - person MeIr; 10.09.2013
comment
В этом примере показан метод службы обработчика, но не показано, как избежать ошибки MustUnderstand. - person Drunix; 09.01.2014