骆驼CXF响应消息给呼叫者-重复的WS-Security部件

时间:2018-07-19 08:25:10

标签: java apache-camel cxf

我定义了一个骆驼CxfEndpoint服务。消息的接收工作正常,但是我正在生成的响应/确认消息有问题。消息中的WS-Security部件/操作被保留下来,因此在响应中,我有自己的WS-Security部件(签名时间戳记)以及来自调用者/原始消息的WS-Security部件。 原始呼叫者不接受消息确认,并且我怀疑这是问题所在(我有自己的BinarySecuritySessionToken签名和我们自己的签名)。

骆驼路线对于尝试解决该问题非常简单:

from("myEndpoint")
    .transacted()
    .process(new PreProcessor())
    .to("mock:end")

我在路线中将骆驼CxfEndpoint定义为:

CxfEndpoint cxfEndpoint = new CxfEndpoint();
cxfEndpoint.setAddress("http://0.0.0.0:8888/services/Service");
cxfEndpoint.setWsdlURL("Service.wsdl");
cxfEndpoint.setCamelContext(camelContext);
....

问题示例时间戳:

<wsu:Timestamp wsu:Id="TS-6757512FE17DCDC903153191998160526">                                   
  <wsu:Created>2018-07-18T13:19:41.605Z</wsu:Created>
  <wsu:Expires>2018-07-18T13:24:41.605Z</wsu:Expires>                                           
</wsu:Timestamp>
<u:Timestamp xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" u:Id="uuid-b2a1c0b2-8263-4afc-bc99-f8a46da80ce7-693">
  <u:Created>2018-07-18T13:19:42.905Z</u:Created>
  <u:Expires>2018-07-18T13:24:42.905Z</u:Expires>
</u:Timestamp>

响应消息的一般结构似乎很好,但是我需要从消息中剥离WS-Security Action Parts。 有没有办法剥离这些部分,还是我需要构造一个全新的消息? 谢谢。如果需要其他信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

因此,我通过添加另一个拦截器来删除安全头来解决此问题。 我想知道这是否可以接受,或者是否有更好的解决方案。

public class RemoveSecurityHeadersOutInterceptor extends AbstractSoapInterceptor
{    
  public RemoveSecurityHeadersOutInterceptor(String phase) {
    super(Phase.PRE_PROTOCOL);
  }

public void handleMessage(SoapMessage message) throws Fault
{
  List<Header> headers = message.getHeaders(); 
  headers.removeIf(h -> h.getName().getLocalPart().equals("Security"));
  }
}