2016-06-08 5 views
1

Извините за этот вопрос, он может появиться повторно, я полностью заблокирован. Я пытаюсь внедрить сервер веб-сервисов в верхней части CXF рамки. Jax-ws очень полезен для обработки веб-сервиса, его легко реализовать. Но проблема возникает, если вы хотите ввести безопасность.JAVA - CXF WS-security «При проверке сообщения возникла ошибка безопасности»

Чтобы справиться с безопасностью в реализации следующий исходный код:

EndpointImpl jaxWsEndpoint = (EndpointImpl) Endpoint.publish(endPointAddress, httpWebService); 
inProps.put("action", "UsernameToken Timestamp"); 
inProps.put("passwordType", "PasswordText"); 
inProps.put("passwordCallbackClass", "com.company.webService.PasswordListener"); 
jaxWsEndpoint.getInInterceptors().add(new WSS4JInInterceptor(inProps)); 

я нажимаю на эту веб-службы следующих SOAP запросу:

... 
<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 wsu:id="UsernameToken-27777511" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:Username>admin</wsse:Username> 
     <wsse:Password type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">pass</wsse:Password> 
    </wsse:Usernametoken> 
    </wsse:Security> 
</soapenv:Header> 
... 

рамки CXF получил мою просьбу попробовать для обработки защитной части и бросить мне следующее исключение:

Jun 08, 2016 10:48:24 AM org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor checkActions 
WARNING: Security processing failed (actions mismatch) 
Jun 08, 2016 10:48:24 AM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging 
WARNING: Interceptor for {http://httpAbstractHandlerImplementation.webService.company.co /}HttpWebServiceService has thrown exception, unwinding now 
org.apache.cxf.binding.soap.SoapFault: A security error was encountered when verifying the message at org.apache.cxf.ws.security.wss4j.WSS4JUtils.createSoapFault(WSS4JUtils.java:218) 
at org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessageInternal(WSS4JInInterceptor.java:316) 

Если у кого-то есть идея, где я сделал ошибку.

Благодаря

ответ

1

Вы inProps.put("action", "UsernameToken Timestamp"); но не Отметка в вашем заголовке безопасности. Удалите «Timestamp» из ваших действий или добавьте соответствующий заголовок безопасности.

EDIT сообщение вполне понятно «обработка безопасности не удалось (действия рассогласования)» Так, глядя на ваш запрос показывает еще одну ошибку: Это должно быть wsse:UsernameToken вместо wsse:Usernametoken, как в official spec.

+0

Большое спасибо за ваш ответ, я уже пробовал это, безуспешно. К сожалению, у меня такое же исключение. – BrK

+0

Два вопроса: Какие версии cxf и wss4j вы используете и что именно вы пытались? Удалить действие или добавить временную метку? Если последнее: вы проверили порядок заголовков? Очень важно, чтобы порядок заголовков безопасности был точно таким, как ожидает InInterceptor. – Frank

+0

Так что я использую ** CXF ** версию 3.1.6. И чтобы ответить на ваш вопрос, я удалил «Timestamp» из контейнера свойств – BrK